C++のBSTIIの後継者
二分探索木にノードがあるとすると、BSTでそのノードの順序どおりの後続ノードを見つける必要があります。順序どおりの後続がない場合は、nullを返します。ノードの後継は、ノードの値よりも小さいキーを持つノードであることがわかっています。
ノードには直接アクセスできますが、ツリーのルートにはアクセスできません。ここで、各ノードはその親ノードへの参照を持ちます。以下はノードの定義です-
class Node {
public int val;
public Node left;
public Node right;
public Node parent;
} 入力が-
のような場合
ノードが2の場合、出力は3になります。
これを解決するには、次の手順に従います-
-
ノードの権利がnullでない場合、-
-
ノード:=ノードの右側
-
ノードの左側がnullでない場合は、-
を実行します。-
ノード:=ノードの左側
-
-
リターンノード
-
-
一方(ノードの親がnullでなく、ノードがノードの親の左側と等しくない)、do-
-
node:=ノードの親
-
-
リターンノードの親
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h>
using namespace std;
class Node {
public:
int val;
Node* left;
Node* right;
Node* parent;
Node(int v, Node* par = NULL){
val = v;
left = NULL;
right = NULL;
parent = par;
}
};
class Solution {
public:
Node* inorderSuccessor(Node* node) {
if (node->right) {
node = node->right;
while (node->left)
node = node->left;
return node;
}
while (node->parent && node != node->parent->left) {
node = node->parent;
}
return node->parent;
}
};
main(){
Solution ob;
Node *root = new Node(5);
root->left = new Node(3, root);
root->right = new Node(6, root);
root->left->left = new Node(2, root->left);
root->left->right = new Node(4, root->left);
root->left->left->left = new Node(1, root->left->left);
cout << (ob.inorderSuccessor(root->left->left))->val;
} 入力
Node *root = new Node(5); root->left = new Node(3, root); root->right = new Node(6, root); root->left->left = new Node(2, root->left); root->left->right = new Node(4, root->left); root->left->left->left = new Node(1, root->left->left); (ob.inorderSuccessor(root->left->left))->val
出力
3
-
C++のバイナリツリーでノードの後続を事前注文する
この問題では、二分木とノード値が与えられます。私たちのタスクは、ノードのプレオーダーサクセサを印刷することです。 二分木 は、各ルートノードが最大2つの子ノードを持つことができる特殊なタイプのツリーです。 プレオーダートラバーサル ツリーのノードをトラバースする方法です。ここでは、最初にルートノードをトラバースし、次に左の子、次に右の子をトラバースします。 後続ノードの事前注文 ノードのプレオーダートラバーサルでノードの隣に来るノードです。 問題を理解するために例を見てみましょう Input: 9 Output 0 Explanation: the preorder traver
-
C ++の特定のBSTのすべてのノードに、より大きな値をすべて追加しますか?
BSTまたは二分探索木は、すべての左ノードがルート値よりも小さく、すべての右ノードが大きい二分木の形式です。この問題では、バイナリツリーを取得し、現在のノードより大きいすべての値を追加します。 「BSTのすべてのノードにすべての大きい値を追加する」という問題は単純化されています。BSTの場合、現在のノード値よりも大きいすべてのノード値をそのノード値に追加します。 BST問題ステートメントの各ノードにすべての大きい値を追加します- 二分探索木(BST)が与えられた場合、各ノードに、より大きな値のすべてのノードの合計を追加する必要があります。 説明 このプログラムは、BSTを、すべての