C++で最も深いノードの合計を見つけるプログラム
二分木があるとしましょう。その最も深い葉の値の合計を見つける必要があります。したがって、ツリーが次のような場合-
その場合、出力は11になります。
これを解決するには、次の手順に従います-
-
マップmとmaxDepthを定義します
-
再帰メソッドsolve()を定義します。これはノードとレベルを取り、最初はレベルは0です
-
ノードが存在しない場合は、戻ります
-
maxDepth:=レベルの最大値とmaxDepth
-
ノードの値だけm[レベル]を増やします
-
解決(ノードの左側、レベル+ 1)
-
解決(ノードの右側、レベル+ 1)
-
mainメソッドで、maxDepth:=0を設定してから、solve(root、0)
-
m [maxDepth]
を返します
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h>
using namespace std;
class TreeNode{
public:
int val;
TreeNode *left, *right;
TreeNode(int data){
val = data;
left = NULL;
right = NULL;
}
};
class Solution {
public:
int maxDepth;
map <int, int> m;
void solve(TreeNode* node, int level = 0){
if(!node)return;
maxDepth = max(level, maxDepth);
m[level] += node->val;
solve(node->left, level + 1);
solve(node->right, level + 1);
}
int deepestLeavesSum(TreeNode* root) {
maxDepth = 0;
m.clear();
solve(root);
return m[maxDepth];
}
};
main(){
TreeNode *root = new TreeNode(1);
root−>left = new TreeNode(2);
root−>right = new TreeNode(3);
root−>left−>left = new TreeNode(4);
root−>left−>right = new TreeNode(5);
root−>right−>right = new TreeNode(6);
root−>right−>right−>right = new TreeNode(4);
root−>left−>left−>left = new TreeNode(7);
Solution ob;
cout << (ob.deepestLeavesSum(root));
} 入力
TreeNode *root = new TreeNode(1); root−>left = new TreeNode(2); root−>right = new TreeNode(3); root−>left−>left = new TreeNode(4); root−>left−>right = new TreeNode(5); root−>right−>right = new TreeNode(6); root−>right−>right−>right = new TreeNode(4); root−>left−>left−>left = new TreeNode(7);
出力
11
-
C++で平行四辺形の面積を見つけるプログラム
この問題では、平行四辺形の底と高さを表す2つの値が与えられます。私たちのタスクは、C++で平行四辺形の領域を見つけるプログラムを作成することです。 平行四辺形 は、反対側が等しく平行な4辺の閉じた図形です。 問題を理解するために例を見てみましょう 入力 B = 20, H = 15 出力 300 説明 平行四辺形の面積=B* H =20 * 15 =300 ソリューションアプローチ この問題を解決するために、平行四辺形の面積の幾何学的公式を使用します。 Area = base * height. ソリューションの動作を説明するプログラム 例 #include <io
-
C++で与えられた完全な二分木のすべてのノードの合計を見つけます
完全な二分木のレベル数を表す正の整数Lがあるとします。この完全な二分木のリーフノードには、1からnまでの番号が付けられています。ここで、nはリーフノードの数です。親ノードは子の合計です。私たちの仕事は、この完璧な二分木のすべてのノードの合計を出力するプログラムを書くことです。したがって、ツリーが以下のようになっている場合- したがって、合計は30です。 よく見ると、すべてのノードの合計を見つける必要があります。リーフノードは1からnまでの値を保持しているため、式n(n + 1)/2を使用してリーフノードの合計を取得できます。これは完全な二分木であるため、各レベルの合計は同じになります