C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++の特定のBSTのすべてのノードに、より大きな値をすべて追加しますか?


BSTまたは二分探索木は、すべての左ノードがルート値よりも小さく、すべての右ノードが大きい二分木の形式です。この問題では、バイナリツリーを取得し、現在のノードより大きいすべての値を追加します。 「BSTのすべてのノードにすべての大きい値を追加する」という問題は単純化されています。BSTの場合、現在のノード値よりも大きいすべてのノード値をそのノード値に追加します。

BST問題ステートメントの各ノードにすべての大きい値を追加します-

二分探索木(BST)が与えられた場合、各ノードに、より大きな値のすべてのノードの合計を追加する必要があります。

C ++の特定のBSTのすべてのノードに、より大きな値をすべて追加しますか?

説明

このプログラムは、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;
}

  1. C++で指定されたレベル順序トラバーサルからBSTを構築します

    1つのレベルの順序トラバーサルがあるとします。このトラバーサルから。ツリーを生成する必要があるため、トラバーサルが[7、4、12、3、6、8、1、5、10]の場合、ツリーは-のようになります。 これを解決するために、再帰的アプローチを使用します。最初の要素はルートになります。 2番目の要素は左の子になり、3番目の要素は右の子になります(BSTの条件が満たされる場合)、このプロパティはすべての要素で満たされます。したがって、次の手順に従います- 最初に、配列の最初の要素を取得し、これをルートにする必要があります。 次に、2番目の要素を取ります。それがルートよりも小さい場合は、

  2. C++のバイナリツリーでルートから特定のノードまでの距離を検索します

    ノードが少ない二分木があると考えてください。ルートと別のノードuの間の距離を見つける必要があります。ツリーが次のようになっているとします。 これで、(root、6)=2の間の距離、パスの長さは2、(root、8)=3の間の距離などになります。 この問題を解決するために、再帰的アプローチを使用して、左右のサブツリーでノードを検索し、各レベルの長さも更新します。 例 #include<iostream> using namespace std; class Node {    public:       int data; &