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

C++のバイナリツリーのすべての正しいノードの中から最大値を見つけます


この問題では、二分木が与えられます。私たちのタスクは、バイナリツリー内のすべての適切なノードの中から最大値を見つけることです。

問題の説明: ここでは、二分木のすべての正しい子ノードの中から最大値を見つける必要があります。

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

入力:

C++のバイナリツリーのすべての正しいノードの中から最大値を見つけます

出力: 9

説明:

すべての正しいノードは次のとおりです:{2、8、9}。それらの最大数は9です。

ソリューションアプローチ

この問題を解決するには、ツリーをトラバースして、適切な子が存在するかどうかを確認する必要があります。存在する場合は、maxRight要素と比較し、大きい場合は置き換えます。

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

#include <iostream>
using namespace std;

struct Node {
   int data;
   struct Node *left, *right;
};

Node* newNode(int data) {
   
   Node* temp = new Node;
   temp->data = data;
   temp->left = temp->right = NULL;
   return temp;
}

int findMaxRightNode(Node* root) {
   
   int maxRight = -100;

   if (root == NULL)
      return -1;

   if (root->right != NULL)
      maxRight = root->right->data;

   return max( findMaxRightNode(root->right), max(maxRight, findMaxRightNode(root->left) ) );
}

int main() {

   Node* root = newNode(5);
   root->left = newNode(3);
   root->right = newNode(2);
   root->left->left = newNode(1);
   root->left->right = newNode(8);
   root->right->left = newNode(6);
   root->right->right = newNode(9);

   cout<<"The maximum among all right nodes in Binary Tree is "<< findMaxRightNode(root);

   return 0;
}

出力

The maximum among all right nodes in Binary Tree is 9

  1. C++の二分木で最大垂直和を見つける

    二分木があるとします。タスクは、垂直順序トラバーサルのすべてのノードの合計の最大値を出力することです。したがって、ツリーが以下のようになっている場合- 垂直方向の走査は-のようなものです 4 2 1 + 5 + 6 = 12 3 + 8 = 11 7 9 ここでの最大値は12です。アプローチは単純です。垂直順序トラバーサルを実行してから、合計を見つけて最大値を確認します。 例 #include<iostream> #include<map> #include<vector> #include<queue> using namespace

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

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