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を、すべての