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

C++プログラムのバイナリツリーで最も深い奇数レベルノードの深さ


このチュートリアルでは、二分木で最も深い奇数レベルのノードを見つける方法を学習します。

これは、二分木の深さを見つけることに似ています。ここで、もう1つの条件、つまり、現在のレベルが奇数であるかどうかを確認する必要があります。

問題を解決するための手順を見てみましょう。

  • ダミーデータで二分木を初期化します。

  • 二分木で最も深い奇数レベルのノードを見つけるための再帰関数を記述します。

    • 現在のノードがリーフノードであり、レベルが奇数の場合は、現在のレベルを返します。

    • それ以外の場合は、再帰関数呼び出しを使用して左ノードと右ノードの最大値を返します。

  • 最も深い奇数レベルのノードを印刷します。

コードを見てみましょう。

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   struct Node *left, *right;
};
struct Node* newNode(int data) {
   struct Node* node = (struct Node*) malloc(sizeof(struct Node));
   node->data = data;
   node->left = node->right = NULL;
   return node;
}
int oddLeafDepthInTree(struct Node *root, int level) {
   if (root == NULL) {
      return 0;
   }
   if (root->left == NULL && root->right == NULL && level % 2 == 1) {
      return level;
   }
   return max(oddLeafDepthInTree(root->left, level + 1), oddLeafDepthInTree(root->right, level + 1));
}
int main() {
   struct Node* root = newNode(1);
   root->left = newNode(2);
   root->right = newNode(3);
   root->left->left = newNode(4);
   root->right->left = newNode(5);
   root->right->right = newNode(6);
   root->right->left->right = newNode(7);
   root->right->right->right = newNode(8);
   int level = 1, depth = 0;
   cout << oddLeafDepthInTree(root, level) << endl;
   return 0;
}

出力

上記のコードを実行すると、次の結果が得られます。

3

結論

チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。


  1. C++の二分木で最も近い葉を見つけます

    1つの二分木が与えられたとします。さまざまなレベルのリーフノードがあります。ノードを指す別のポインターが与えられます。尖ったノードから最も近いリーフノードまでの距離を見つける必要があります。ツリーが以下のようであると考えてください- ここで、リーフノードは2、-2、および6です。ポインタがノード-5を指している場合、-5から最も近いノードは距離1になります。 これを解決するために、指定されたノードをルートとするサブツリーをトラバースし、サブツリー内で最も近いリーフを見つけて、距離を保存します。ここで、ルートからツリーをトラバースします。ノードxが左側のサブツリーに存在する場合は、右側

  2. C++を使用してツリーの奇数レベルでノードを印刷するプログラム

    このチュートリアルでは、特定の二分木の奇数レベルに存在するノードを印刷するプログラムについて説明します。 このプログラムでは、ルートノードのレベルは1と見なされ、同時に代替レベルは次の奇数レベルになります。 たとえば、次の二分木が与えられているとしましょう この場合、この二分木の奇数レベルのノードは1、4、5、6になります。 例 #include <bits/stdc++.h> using namespace std; struct Node {    int data;    Node* left, *right; }; //p