C++で与えられた完全な二分木のすべてのノードの合計を見つけます
完全な二分木のレベル数を表す正の整数Lがあるとします。この完全な二分木のリーフノードには、1からnまでの番号が付けられています。ここで、nはリーフノードの数です。親ノードは子の合計です。私たちの仕事は、この完璧な二分木のすべてのノードの合計を出力するプログラムを書くことです。したがって、ツリーが以下のようになっている場合-
したがって、合計は30です。
よく見ると、すべてのノードの合計を見つける必要があります。リーフノードは1からnまでの値を保持しているため、式n(n + 1)/2を使用してリーフノードの合計を取得できます。これは完全な二分木であるため、各レベルの合計は同じになります。したがって、最後のレベルの合計を見つけて、それをレベル数で乗算します。
例
#include<iostream> #include<cmath> using namespace std; int treeSum(int level) { int total_leaves = pow(2, level - 1); int leaf_sum = 0; leaf_sum = (total_leaves * (total_leaves + 1)) / 2; int sum = leaf_sum * level; return sum; } int main() { int levels = 4; cout << "Sum of all nodes for a perfect binary tree with level " << levels << " is: " << treeSum(levels); }
出力
Sum of all nodes for a perfect binary tree with level 4 is: 144
-
C++の特定のバイナリツリーのすべてのレベルにおける非リーフノードの最大合計
この問題では、二分木が与えられます。私たちのタスクは、c++で指定されたバイナリツリーのすべてのレベルから非リーフノードの最大合計を見つけるプログラムを作成することです。 問題の説明 −ツリーのすべての非リーフノードとすべてのレベルの合計を計算してから、最大合計を出力します。 問題を理解するために例を見てみましょう 入力 − 出力 − 9 説明 −各レベルの非リーフノードの合計- Level 1: 4 Level 2: 1+2 = 3 Level 3: 9 (4, 7 are leaf nodes) Level 4: 0 この問題を解決するには、バイナリツリーのレベル順ト
-
C++のバイナリツリーで指定された2つのレベル間のすべてのノードを出力します
この問題では、バイナリツリーとツリー内の2つのレベル(上位と下位)が与えられ、ツリーの上位レベルと下位レベルの間のすべてのノードを印刷する必要があります。 二分木 は、各ノードに最大2つのノード(1つまたは2つ/なし)を持つ特別なツリーです。 問題を理解するために例を見てみましょう- アッパー−1 低い− 3 出力 − 6 3 9 7 4 8 10 この問題を解決するには、ツリーのノードを特定のレベルで印刷する必要があります。 上部からのループを使用して再帰関数を呼び出します。 下へ ツリーのレベル。 このアルゴリズムは単純ですが、n 2の次数がより複雑です。 。