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

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


完全な二分木のレベル数を表す正の整数Lがあるとします。この完全な二分木のリーフノードには、1からnまでの番号が付けられています。ここで、nはリーフノードの数です。親ノードは子の合計です。私たちの仕事は、この完璧な二分木のすべてのノードの合計を出力するプログラムを書くことです。したがって、ツリーが以下のようになっている場合-

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

したがって、合計は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

  1. C++の特定のバイナリツリーのすべてのレベルにおける非リーフノードの最大合計

    この問題では、二分木が与えられます。私たちのタスクは、c++で指定されたバイナリツリーのすべてのレベルから非リーフノードの最大合計を見つけるプログラムを作成することです。 問題の説明 −ツリーのすべての非リーフノードとすべてのレベルの合計を計算してから、最大合計を出力します。 問題を理解するために例を見てみましょう 入力 − 出力 − 9 説明 −各レベルの非リーフノードの合計- Level 1: 4 Level 2: 1+2 = 3 Level 3: 9 (4, 7 are leaf nodes) Level 4: 0 この問題を解決するには、バイナリツリーのレベル順ト

  2. C++のバイナリツリーで指定された2つのレベル間のすべてのノードを出力します

    この問題では、バイナリツリーとツリー内の2つのレベル(上位と下位)が与えられ、ツリーの上位レベルと下位レベルの間のすべてのノードを印刷する必要があります。 二分木 は、各ノードに最大2つのノード(1つまたは2つ/なし)を持つ特別なツリーです。 問題を理解するために例を見てみましょう- アッパー−1 低い− 3 出力 − 6 3 9 7 4 8 10 この問題を解決するには、ツリーのノードを特定のレベルで印刷する必要があります。 上部からのループを使用して再帰関数を呼び出します。 下へ ツリーのレベル。 このアルゴリズムは単純ですが、n 2の次数がより複雑です。 。