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

C++でKの葉を持つ二分木のすべてのノードを印刷します


この問題では、二分木と整数Kが与えられ、子サブツリーにKの葉を持つ二分木のすべてのノードを出力する必要があります。

二分木 は、各ノードに最大2つのノード(1つまたは2つ/なし)を持つ特別なツリーです。

リーフノード 二分木のは、ツリーの最後にあるノードです。

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

C++でKの葉を持つ二分木のすべてのノードを印刷します

K =2

出力- {S}

この問題を解決するために、ツリーのトラバーサル(ポストオーダー)を実行します。ここで、葉の合計がKの場合、左側のサブツリーと右側のサブツリーがそれぞれ表示されます。現在のノードを出力します。 それ以外の場合は再帰的に呼び出し、サブツリーの葉がカウントされます。

このソリューションはトラバースに基づいているため、複雑さはツリーのサイズのオーダーになります。 時間計算量 O(n)

上記のアプローチを実装するためのプログラム

#include<bits/stdc++.h>
using namespace std;
struct Node{
   char data ;
   struct Node * left, * right ;
};
struct Node * insertNode(char data){
   struct Node * node = new Node;
   node->data = data;
   node->left = node->right = NULL;
   return (node);
}
int nodeWithKLeave(struct Node *ptr,int k){
   if (ptr == NULL)
      return 0;
   if (ptr->left == NULL && ptr->right == NULL)
      return 1;
   int total = nodeWithKLeave(ptr->left, k) + nodeWithKLeave(ptr->right, k);
   if (k == total)
      cout<<ptr->data<<" ";
   return total;
}
int main() {
   struct Node *root = insertNode('A');
   root->left = insertNode('B');
   root->right = insertNode('K');
   root->left->left = insertNode('N');
   root->left->right = insertNode('S');
   root->left->left->left = insertNode('X');
   root->left->left->right = insertNode('H');
   root->right->right = insertNode('E');
   root->right->left = insertNode('T');
   root->right->left->left = insertNode('O');
   root->right->left->right = insertNode('P');
   int K = 2;
   cout<<"Nodes with "<<K<<" leaves is :\n";
   nodeWithKLeave(root, K);
   return 0;
}

出力

Nodes with 2 leaves are:
N T

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

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

  2. C++プログラミングのバイナリツリー内のすべてのノードの印刷レベル。

    二分木が与えられた場合、タスクは、1からnまでのノードに格納されているすべてのキーに関連付けられたレベルを出力することです 上記のツリーでは、ノードは- 10 at level 1 3 and 211 at level 2 140, 162, 100 and 146 at level 3 キーが与えられると、プログラムはその特定のキーのレベルを出力する必要があります。 例 Input: 10 3 211 140 162 100 146 Output:    level of 10 is 1    Level of 3 is 2   &