特定のBSTのすべてのノードにすべての大きい値を追加しますか?
BSTまたは二分探索木は、すべての左ノードがルート値よりも小さく、すべての右ノードが大きい二分木の形式です。この問題では、バイナリツリーを取得し、現在のノードより大きいすべての値を追加します。 「BSTのすべてのノードにすべての大きい値を追加する」という問題は単純化されています。BSTの場合、現在のノード値よりも大きいすべてのノード値をそのノード値に追加します。
BST問題ステートメントの各ノードにすべての大きい値を追加します:
二分探索木(BST)が与えられた場合、各ノードに、より大きな値のすべてのノードの合計を追加する必要があります。
10 / \ / \ 5 20 / \ / \ 1 7 1 5
出力
70 / \ 82 45 / \ / \ 83 77 60 25
説明
このプログラムは、BSTをバイナリツリーに変換します。ノードの値は、すべての大きい要素とノードの元の値の合計になります。
二分探索木ソリューションの各ノードに、より大きな値をすべて追加します。
リバースインオーダートラバーサル(再帰は左サブツリーではなく右サブツリーで最初に呼び出されます)を使用し、これまでにトラバースされたノードの合計を格納する変数を維持します。
次に、この合計を使用して、現在のノードの値を変更します。最初にその値を合計に追加し、次にノードの値をこの合計に置き換えます。
例
#include <iostream >
using namespace std;
struct node {
int data;
node *left;
node *right;
};
node *newNode(int key) {
node *temp=new node;
temp->left=NULL;
temp->right=NULL;
temp->data=key;
return temp;
}
void Inorder(node *root) {
if(!root)
return;
Inorder(root->left);
cout<<root->data<<" ";
Inorder(root->right);
}
node *Insert(node *root,int key) {
if(!root)
return newNode(key);
if(key<root->data)
root->left=Insert(root->left,key);
else
root->right=Insert(root->right,key);
return root;
}
void RevInorderAdd(node *root,int &sum) {
if(!root)
return;
RevInorderAdd(root->right,sum);
sum+=root->data;
root->data=sum;
RevInorderAdd(root->left,sum);
}
void AddGreater(node *root) {
int sum=0;
RevInorderAdd(root,sum);
}
int main() {
/* Let us create following BST
10
/ \
5 20
/ \ / \
1 7 15 25 */
node *root = NULL;
root = Insert(root, 10);
Insert(root, 20);
Insert(root, 25);
Insert(root, 15);
Insert(root, 5);
Insert(root, 7);
Insert(root, 1);
Inorder(root);
cout<<endl;
AddGreater(root);
Inorder(root);
cout<<endl;
return 0;
} -
C++のバイナリツリーでルートから特定のノードまでの距離を検索します
ノードが少ない二分木があると考えてください。ルートと別のノードuの間の距離を見つける必要があります。ツリーが次のようになっているとします。 これで、(root、6)=2の間の距離、パスの長さは2、(root、8)=3の間の距離などになります。 この問題を解決するために、再帰的アプローチを使用して、左右のサブツリーでノードを検索し、各レベルの長さも更新します。 例 #include<iostream> using namespace std; class Node { public: int data; &
-
C ++の特定のBSTのすべてのノードに、より大きな値をすべて追加しますか?
BSTまたは二分探索木は、すべての左ノードがルート値よりも小さく、すべての右ノードが大きい二分木の形式です。この問題では、バイナリツリーを取得し、現在のノードより大きいすべての値を追加します。 「BSTのすべてのノードにすべての大きい値を追加する」という問題は単純化されています。BSTの場合、現在のノード値よりも大きいすべてのノード値をそのノード値に追加します。 BST問題ステートメントの各ノードにすべての大きい値を追加します- 二分探索木(BST)が与えられた場合、各ノードに、より大きな値のすべてのノードの合計を追加する必要があります。 説明 このプログラムは、BSTを、すべての