C++のバイナリツリーでの最大の親子の合計
このチュートリアルでは、バイナリツリーで最大の親子の合計を見つけるプログラムについて説明します
このために、バイナリツリーが提供されます。私たちのタスクは、親ノードとその子ノードを合計し、最終的にそのすべての最大値を見つけて印刷することです。
例
#include <iostream>
using namespace std;
struct Node {
int data;
struct Node *left, *right;
};
//inserting nodes
struct Node* newNode(int n) {
struct Node* root = new Node();
root->data = n;
root->left = root->right = NULL;
return root;
}
int maxSum(struct Node* root) {
if (root == NULL)
return 0;
int res = maxSum(root->left);
if (root->left != NULL && root->right != NULL) {
int sum = root->data + root->left->data + root->right->data;
res = max(res, sum);
}
return max(res, maxSum(root->right));
}
int main() {
struct Node* root = newNode(15);
root->left = newNode(16);
root->left->left = newNode(8);
root->left->left->left = newNode(55);
root->left->right = newNode(67);
root->left->right->left = newNode(44);
root->right = newNode(17);
root->right->left = newNode(7);
root->right->left->right = newNode(11);
root->right->right = newNode(41);
cout << maxSum(root);
return 0;
} 出力
91
-
C++の二分木で最大垂直和を見つける
二分木があるとします。タスクは、垂直順序トラバーサルのすべてのノードの合計の最大値を出力することです。したがって、ツリーが以下のようになっている場合- 垂直方向の走査は-のようなものです 4 2 1 + 5 + 6 = 12 3 + 8 = 11 7 9 ここでの最大値は12です。アプローチは単純です。垂直順序トラバーサルを実行してから、合計を見つけて最大値を確認します。 例 #include<iostream> #include<map> #include<vector> #include<queue> using namespace
-
C++のバイナリツリーで子の合計プロパティを確認します
二分木があるとします。二分木は、次の特性を満たす場合に有効です。 各ノードには、左右の子の値の合計と同じデータ値が含まれている必要があります。いずれかの側に子がない場合は、0として扱われます。 以下のように、指定されたプロパティを満たすツリーが存在するとします。 これをチェックするそのようなトリックはありません。ノードとその子の両方がプロパティを満たしている場合はツリーを再帰的にトラバースする必要があり、それ以外の場合はfalseを返します。 例 #include <iostream> using namespace std; class node {