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

C++での順序どおりの完全なバイナリツリーのミラーイメージノードの合計


この問題では、完全な二分木が与えられます。私たちのタスクは、完全な二分木の鏡像ノードの合計を順番に見つけるプログラムを作成することです。

ここでは、左側の太陽の木の順番の走査を見つける必要があります。次に、ノードごとに、それを使用して鏡像を追加します。これは、左側の葉ノードをトラバースする場合、右側の葉ノードの値を追加することを意味します。鏡像ノードなので。

いくつかの重要な定義

完全な二分木 は、最後のレベルを除くすべてのレベルのノード数が最も多い二分木です。

順序のないトラバーサル は、左側のサブツリーが最初に訪問され、ルートが訪問され、右側のサブツリーが訪問されるツリートラバーサル手法です。

問題を理解するために例を見てみましょう

入力

C++での順序どおりの完全なバイナリツリーのミラーイメージノードの合計

出力 − 9 9 17 2

説明 −左側のサブツリーの順序付けられた走査は5-7-8-1です。

すべてのノードを追加すると、画像がミラーリングされます。

5 + 4 = 9
7 + 2 = 9
8 + 9 = 17
1 + 1 = 2

この問題を解決するために、順序トラバーサルを使用してバイナリツリーをトラバースします。 2つのノードを使用します。1つは左側のサブツリーをトラバースし、もう1つはノードのミラーにアクセスします。たとえば、左側のサブツリーのルートノードがあり、そのサブツリーのミラーイメージをトラバースするミラールートがあります。

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
typedef struct node {
   int data;
   struct node* left;
   struct node* right;
   node(int d){
      data = d;
      left = NULL;
      right = NULL;
   }
} Node;
void printMirrorSum(Node* root, Node* rootMirror){
   if (root->left == NULL && rootMirror->right == NULL)
      return;
   printMirrorSum(root->left, rootMirror->right);
   cout<<(root->left->data + rootMirror->right->data)<<endl;
   printMirrorSum(root->right, rootMirror->left);
}
int main(){
   Node* root = new Node(1);
   root->left = new Node(7);
   root->right = new Node(2);
   root->left->left = new Node(5);
   root->left->right = new Node(8);
   root->right->left = new Node(9);
   root->right->right = new Node(4);
   cout<<"Sum of node and mirror image nodes are :\n";
   printMirrorSum(root, root);
   if (root)
      cout<<(root->data + root->data);
   return 0;
}

出力

Sum of node and mirror image nodes are :
9
9
17
2

  1. C++で与えられた完全な二分木のすべてのノードの合計を見つけます

    完全な二分木のレベル数を表す正の整数Lがあるとします。この完全な二分木のリーフノードには、1からnまでの番号が付けられています。ここで、nはリーフノードの数です。親ノードは子の合計です。私たちの仕事は、この完璧な二分木のすべてのノードの合計を出力するプログラムを書くことです。したがって、ツリーが以下のようになっている場合- したがって、合計は30です。 よく見ると、すべてのノードの合計を見つける必要があります。リーフノードは1からnまでの値を保持しているため、式n(n + 1)/2を使用してリーフノードの合計を取得できます。これは完全な二分木であるため、各レベルの合計は同じになります

  2. C ++プログラミングでリーフノードになるので、バイナリツリーのノードを出力します。

    二分木が与えられた場合、その葉のノードを印刷してから、それらの葉のノードを削除してから、ツリーにノードがなくなるまで繰り返す必要があります。 例 したがって、問題の出力は-になります。 6 7 9 13 143 421 アプローチ DFSを適用するアプローチを採用しています。 一時的な値を適用するには、すべての値にゼロを割り当ててから、すべてのノードに値 maximum(両方の子の値)+1を割り当てます。 。 アルゴリズム right =NULL、return(node)FUNCTION void postod(struct Node * node、v