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

Binary TreeinC++で特定のノードのいとこを出力します


二分木 は、すべてのノードに最大2つの子ノードがある特別なツリーです。したがって、すべてのノードはリーフノードであるか、1つまたは2つの子ノードを持っています。

Binary TreeinC++で特定のノードのいとこを出力します

この問題では、二分木が与えられ、その木のノードがあり、そのノードのいとこノードを見つける必要があります。二分木には兄弟ノードは出力されません。

例を見てみましょう

Binary TreeinC++で特定のノードのいとこを出力します

上記の二分木では、いとこノードは5です。

概念をより明確にするために、いとこノードについて説明しましょう。二分木では、2つのノードが二分木の同じレベル(深さ)にあるが、同じ親ノードを持たない場合、2つのノードはいとこノードであると言われます。

それでは、この問題の解決策を作成しましょう。

ここでは、ノードの同じレベルにあるすべてのノード、つまりルートノードから同じ距離にあるすべてのノードを印刷する必要があります。ただし、ノード自体と同じ親を持つノードを削除する必要があります。このために、最初にノードのレベルを見つけてから、ノード自体と同じ親を持つノードを除くすべてのノードを出力します。

それでは、このロジックに基づいてプログラムを作成しましょう-

#include <bits/stdc++.h>
using namespace std;
struct Node{
   int data;
   Node *left, *right;
};
Node *newNode(int item){
   Node *temp = new Node;
   temp->data = item;
   temp->left = temp->right = NULL;
   return temp;
}
int levelOfNode(Node *root, Node *node, int level){
   if (root == NULL)
      return 0;
   if (root == node)
      return level;
   int downlevel = levelOfNode(root->left,
   node, level + 1);
   if (downlevel != 0)
      return downlevel;
   return levelOfNode(root->right, node, level + 1);
}
void printCousin(Node* root, Node *node, int level){
   if (root == NULL || level < 2)
      return;
   if (level == 2){
      if (root->left == node || root->right == node)
         return;
      if (root->left)
         cout << root->left->data << " ";
      if (root->right)
         cout << root->right->data;
   }
   else if (level > 2){
      printCousin(root->left, node, level - 1);
      printCousin(root->right, node, level - 1);
   }
}
void cousinNode(Node *root, Node *node){
   int level = levelOfNode(root, node, 1);
   printCousin(root, node, level);
}
int main(){
   Node *root = newNode(11);
   root->left = newNode(15);
   root->right = newNode(4);
   root->left->left = newNode(3);
   root->left->right = newNode(7);
   root->left->right->right = newNode(9);
   root->right->left = newNode(17);
   root->right->right = newNode(8);
   root->right->left->right = newNode(5);
   cout<<”The cousin nodes are : \t”
   cousinNode(root, root->right->right);
   return 0;
}

出力

The cousin nodes are : 3 7

  1. C++で特定のノードから距離kにあるすべてのノードを出力します

    この問題では、二分木、ターゲットノード、整数Kが与えられます。ターゲットノードから距離Kにあるツリーのすべてのノードを印刷する必要があります。 。 二分木 は、各ノードに最大2つのノード(1つまたは2つ/なし)を持つ特別なツリーです。 問題を理解するために例を見てみましょう K =2 ターゲットノード:9 出力 − 5 1 3. 説明 − 距離は、ノードの上位、下位、または同じレベルで取得できます。したがって、それに応じてノードを返します。 この問題を解決するには、ターゲットノードからK距離離れたノードのタイプを理解する必要があります。 上記の試験から、k個の離

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

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