C++での等しいツリーパーティション
n個のノードを持つ二分木があるとすると、元のツリーの1つのエッジを削除した後、値の合計が等しい2つのツリーにツリーを分割できるかどうかを確認するタスクがあります。
したがって、入力が次のような場合
そうすれば、出力は真になります。
-
これを解決するには、次の手順に従います-
-
1つのスタックstを定義する
-
関数solve()を定義します。これはノードを取ります
-
ノードがnullの場合、-
-
0を返す
-
-
leftSum:=solve(ノードの左側)
-
rightSum:=solve(ノードの権利)
-
curr:=val + leftSum+rightSumのノード
-
stにcurrを挿入します
-
リターンカー
-
メインの方法から、次のようにします-
-
解決(ルート)
-
totalSum:=stの最上位要素
-
stから要素を削除
-
(stが空ではない)間、-
-
x:=stの最上位要素
-
stから要素を削除
-
y:=totalSum-x </ P>
-
xがyと同じ場合、-
-
trueを返す
-
-
-
falseを返す
例
理解を深めるために、次の実装を見てみましょう-
#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:
stack <int> st;
int solve(TreeNode* node){
if (!node)
return 0;
int leftSum = solve(node->left);
int rightSum = solve(node->right);
int curr = node->val + leftSum + rightSum;
st.push(curr);
return curr;
}
bool checkEqualTree(TreeNode* root) {
solve(root);
int totalSum = st.top();
st.pop();
while (!st.empty()) {
int x = st.top();
st.pop();
int y = totalSum - x;
if (x == y)
return true;
}
return false;
}
};
main(){
Solution ob;
TreeNode *root = new TreeNode(5);
root->left = new TreeNode(10);
root->right = new TreeNode(10);
root->right->left = new TreeNode(2);
root->right->right = new TreeNode(3);
cout<<(ob.checkEqualTree(root));
} 入力
TreeNode *root = new TreeNode(5); root->left = new TreeNode(10); root->right = new TreeNode(10); root->right->left = new TreeNode(2); root->right->right = new TreeNode(3);
出力
1
-
C++で汚染された二分木の要素を検索する
二分木があるとします。そのツリーのルールは次のとおりです- root.val ==0 treeNode.valがxで、treeNode.leftがnullでない場合、treeNode.left.val =2 * x + 1 treeNode.valがxで、treeNode.rightがnullでない場合、treeNode.right.val =2 * x + 2 今、二分木が汚染されているので。これは、ツリーノードのすべての値が-1に変更されたことを示します。最初にバイナリツリーを回復してから、次のようにFindElementsクラスを実装する必要があります-
-
C++での二分木の剪定
バイナリツリーのヘッドノードルートがあり、さらにすべてのノードの値が0または1であるとします。1を含まないすべてのサブツリーが削除された同じツリーを見つける必要があります。したがって、ツリーが次のような場合- これを解決するには、次の手順に従います- 再帰メソッドsolve()を定義します。これにより、ノードが取得されます。メソッドは次のようになります- ノードがnullの場合、nullを返します ノードの左側:=solve(ノードの左側) ノードの権利:=solve(ノードの権利) ノードの左側がnullで、ノードの右側もnullで、ノード値が0の