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

C++のバイナリツリーにすべてのk-sumパスを出力します


この問題では、二分木と数Kが与えられ、パス内のノードの合計がkに等しいツリー内のすべてのパスを出力する必要があります。

>

ここで、ツリーのパスは、ツリーの任意のノードから開始し、任意のノードで終了することができます。パスは常にルートノードからリーフノードに向かう必要があります。ツリーのノードの値は、正、負、またはゼロにすることができます。

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

C++のバイナリツリーにすべてのk-sumパスを出力します

K =5

出力

1 3 1
3 2
1 4

この問題を解決するために、各ノードをツリーのルートノードとして扱い、値を合計してKに達する一時的なルートから他のノードへのパスを見つけます。

パスのすべてのノードをベクトルに格納し、kに評価される合計値を確認します。

アルゴリズムの実装を示すプログラム-

#include <bits/stdc++.h>
using namespace std;
struct Node {
   int data;
   Node *left,*right;
   Node(int x){
      data = x;
      left = right = NULL;
   }
};
void printPath(const vector<int>& v, int i) {
   for (int j=i; j<v.size(); j++)
      cout<<v[j]<<"\t";
   cout<<"\n";
}
void findKSumPath(Node *root, vector<int>& path, int k) {
   if (!root)
      return;
   path.push_back(root->data);
   findKSumPath(root->left, path, k);
   findKSumPath(root->right, path, k);
   int f = 0;
   for (int j=path.size()-1; j>=0; j--){
      f += path[j];
      if (f == k)
         printPath(path, j);
   }
   path.pop_back();
}
int main() {
   Node *root = new Node(1);
   root->left = new Node(3);
   root->left->left = new Node(1);
   root->left->right = new Node(2);
   root->right = new Node(4);
   root->right->right = new Node(7);
   int k = 5;
   cout<<"Paths with sum "<<k<<" are :\n";
   vector<int> path;
   findKSumPath(root, path, k);
   return 0;
}
出力
Paths with sum 5 are −
1 3 1
3 2
1 4

  1. C++で二分探索木のすべての奇数ノードを印刷します

    この問題では、二分探索木が与えられ、奇数の値を持つすべてのノードを出力する必要があります。 二分探索木 は、次のプロパティを持つ特殊なタイプのツリーです- 左側のサブツリーには、常にルートノードよりも小さい値があります。 右側のサブツリーには、常にルートノードよりも大きい値があります。 左右のサブツリーも、上記の2つのプロパティに従う必要があります。 問題を理解するために例を見てみましょう- 出力 − 1 3 9 この問題を解決するための簡単なアプローチは、ツリーをトラバースすることです。トラバーサルでは、ツリーの各ノードの値を確認します。ノードが奇

  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   &