C++で特定の二分木の左葉ノードの合計を求めます
ルートノードとその左の子と右の子を持つ二分木があるとしましょう。タスクは、親ノードに残されているツリーのリーフノードの合計を見つけることです。
例
入力-1:
出力:
15
説明: 与えられた入力二分木では、すべての左側の葉ノードの合計は9 + 4 + 2 =15です。したがって、出力は15です。
この問題を解決するためのアプローチ
二分木があり、その親に残されているすべてのリーフノードの合計を見つけることがタスクです。
この問題を解決するための再帰的なアプローチは、ルートノードの左側のノードが空かどうかを確認することです。空の場合は、左側のノードの合計を計算し、右側のノードの再帰的な合計を見つけます。したがって、すべてのノードについて、再帰的にチェックし、その合計を見つけます。
- ルートノードとその左の子、および右の子を入力として持つバイナリツリーを取得します。
- 整数関数leftLeafSum(treenode * root)は、ルートノードを入力として受け取り、その親に残されているすべてのリーフノードの合計を返します。
- ルートノードが空またはNULLの場合は、「ゼロ」を返します。それ以外の場合は、ルートノードの左側のノードを確認します。
- ルートノードの左側のノードに子がない場合は、右側のノードを再帰的にチェックします。
- 左の子と右の子の合計を再帰的に返します。
例
#include<bits/stdc++.h> using namespace std; struct treenode { int data; treenode * left; treenode * right; }; struct treenode * createNode(int d) { struct treenode * root = new treenode; root -> data = d; root -> left = NULL; root -> right = NULL; return root; } int leftLeafSum(treenode * root) { if (root == NULL) { return 0; } if (root -> left and!root -> left -> left and!root -> left -> right) { return root -> left -> data + leftLeafSum(root -> right); } return leftLeafSum(root -> left) + leftLeafSum(root -> right); } int main() { struct treenode * root = NULL; root = createNode(4); root -> left = createNode(2); root -> right = createNode(2); root -> left -> right = createNode(7); root -> left -> left = createNode(5); root -> right -> left = createNode(5); root -> right -> right = createNode(7); int sum = leftLeafSum(root); cout << sum << endl; return 0; }
上記のコードを実行すると、次のように出力が生成されます
出力
10
説明: 左側のノードのリーフノードは5と5であり、これらは親に残されているため、すべてのリーフノードの合計は=10になります。
-
C++のバイナリツリーでルートから特定のノードまでの距離を検索します
ノードが少ない二分木があると考えてください。ルートと別のノードuの間の距離を見つける必要があります。ツリーが次のようになっているとします。 これで、(root、6)=2の間の距離、パスの長さは2、(root、8)=3の間の距離などになります。 この問題を解決するために、再帰的アプローチを使用して、左右のサブツリーでノードを検索し、各レベルの長さも更新します。 例 #include<iostream> using namespace std; class Node { public: int data; &
-
C++で与えられた完全な二分木のすべてのノードの合計を見つけます
完全な二分木のレベル数を表す正の整数Lがあるとします。この完全な二分木のリーフノードには、1からnまでの番号が付けられています。ここで、nはリーフノードの数です。親ノードは子の合計です。私たちの仕事は、この完璧な二分木のすべてのノードの合計を出力するプログラムを書くことです。したがって、ツリーが以下のようになっている場合- したがって、合計は30です。 よく見ると、すべてのノードの合計を見つける必要があります。リーフノードは1からnまでの値を保持しているため、式n(n + 1)/2を使用してリーフノードの合計を取得できます。これは完全な二分木であるため、各レベルの合計は同じになります