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

C++を使用してルートから完全なバイナリツリーのすべてのノードへのパスを出力するプログラム


このチュートリアルでは、バイナリツリーのルートノードから特定のバイナリツリーに存在する他のすべてのノードへのパスを出力するプログラムについて説明します。

このプログラムでは、1からNまでの二分木に存在する要素の数を示す数Nが与えられます。 1はバイナリツリーのルートノードです。したがって、私たちのタスクは、ルートノードからバイナリツリーに存在する他のさまざまな要素へのすべての可能なパスを出力することです。

このプログラムを解決するために、与えられたノードIについて、その左の子は2 * iとして計算でき、その右の子は2 * i+1として計算できることがわかっています。次に、バックトラッキングを使用して、その特定の要素のパスをベクトルに格納し、可能なすべてのパスを最終的に出力できます。

#include <iostream>
#include <vector>
using namespace std;
//calculating all the possible paths from the root node
void calc_allpath(vector<int> paths, int nth_node, int kth_node){
   if (kth_node > nth_node)
      return;
   paths.push_back(kth_node);
   for (int i = 0; i < paths.size(); i++)
      cout << paths[i] << " ";
      cout << endl;
   calc_allpath(paths, nth_node, kth_node * 2);
   calc_allpath(paths, nth_node, kth_node * 2 + 1);
}
//printing all the possible paths from the root node
void print_allpath(int nth_node){
   vector<int> paths;
   calc_allpath(paths, nth_node, 1);
}
int main(){
   int nth_node = 9;
   print_allpath(nth_node);
   return 0;
}

出力

1
1 2
1 2 4
1 2 4 8
1 2 4 9
1 2 5
1 3
1 3 6
1 3 7

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

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

  2. C++プログラミングのバイナリツリー内の任意の2つのノード間のパスを出力します。

    個別のノードのバイナリツリーと、バイナリツリー内のパスを出力するバイナリツリーの2つのノードが与えられます。 例 −ノード140から211の間のパスを出力して、その出力が次のようになるようにします- Output: 140->3->10->211 アイデアは、ルートノードから2つのノードへのパスを見つけて、それらを2つの別々のベクトルまたは配列(path1とpath2など)に格納することです。 ここで、2つの異なるケースが発生します- 2つのノードがルートノードの異なるサブツリーにある場合 − 2つのノードが、1つが左に、もう1つが右のように異なるサブツリーにあ