C++で2つが隣接しないような二分木のノードの最大合計
このチュートリアルでは、2つが隣接しないように、バイナリツリー内のノードの最大合計を見つけるプログラムについて説明します。
このために、バイナリツリーが提供されます。私たちのタスクは、サブセット内の2つのノードが直接接続されないように、合計が最大のサブセットを見つけることです。
例
#include <bits/stdc++.h> using namespace std; //binary tree node structure struct node { int data; struct node *left, *right; }; struct node* newNode(int data) { struct node *temp = new struct node; temp->data = data; temp->left = temp->right = NULL; return temp; } int sumOfGrandChildren(node* node); int getMaxSum(node* node); int getMaxSumUtil(node* node, map<struct node*, int>& mp); int sumOfGrandChildren(node* node, map<struct node*, int>& mp){ int sum = 0; if (node->left) sum += getMaxSumUtil(node->left->left, mp) + getMaxSumUtil(node->left->right, mp); if (node->right) sum += getMaxSumUtil(node->right->left, mp) + getMaxSumUtil(node->right->right, mp); return sum; } //returning maximum sum int getMaxSumUtil(node* node, map<struct node*, int>& mp) { if (node == NULL) return 0; if (mp.find(node) != mp.end()) return mp[node]; int incl = node->data + sumOfGrandChildren(node, mp); int excl = getMaxSumUtil(node->left, mp) + getMaxSumUtil(node->right, mp); mp[node] = max(incl, excl); return mp[node]; } int getMaxSum(node* node) { if (node == NULL) return 0; map<struct node*, int> mp; return getMaxSumUtil(node, mp); } int main() { node* root = newNode(1); root->left = newNode(2); root->right = newNode(3); root->right->left = newNode(4); root->right->right = newNode(5); root->left->left = newNode(1); cout << getMaxSum(root) << endl; return 0; }
出力
11
-
C++のバイナリツリーの最大スパイラル合計
この問題では、二分木が与えられます。私たちのタスクは、C++のバイナリツリーで最大スパイラル合計を見つけるプログラムを作成することです。 スパイラルサム 二分木のスパイラルトラバーサルで遭遇するノードの合計です。 ツリーのスパイラルトラバーサルでは、ノードはルートからリーフノードにトラバースされます。トラバーサルは左から右に行われ、次のレベルでは右から左に、以下同様に次のレベルで行われます。 例 − 出力 −5 説明 − ツリーの第2レベルの最初のノードまでスパイラルトラバーサルを検討します。 1+ 5 = 5. 3行目の合計要素は(1-9 + 6-4 =-6)であり
-
C++の二分木で最大垂直和を見つける
二分木があるとします。タスクは、垂直順序トラバーサルのすべてのノードの合計の最大値を出力することです。したがって、ツリーが以下のようになっている場合- 垂直方向の走査は-のようなものです 4 2 1 + 5 + 6 = 12 3 + 8 = 11 7 9 ここでの最大値は12です。アプローチは単純です。垂直順序トラバーサルを実行してから、合計を見つけて最大値を確認します。 例 #include<iostream> #include<map> #include<vector> #include<queue> using namespace