原题:
Given a binary tree with n
nodes, your task is to check if it's possible to partition the tree to two trees which have the equal sum of values after removing exactly one edge on the original tree.
Example 1:
Input: 5 / \ 10 10 / \ 2 3 Output: True Explanation: 5 / 10 Sum: 15 10 / \ 2 3 Sum: 15
Example 2:
Input: 1 / \ 2 10 / \ 2 20 Output: False Explanation: You can't split the tree into two trees with equal sum after removing exactly one edge on the tree.
Note:
- The range of tree node value is in the range of [-100000, 100000].
- 1 <= n <= 10000
思路:
先求出总和,然后第二次进行遍历的时候计算和是不是一半就好
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool checkEqualTree(struct TreeNode* root) {
if(root->left==NULL&&root->right==NULL)
return false;
int getsum1(struct TreeNode* root);
int sum=getsum(root);
printf("%d",sum);
bool getresult(struct TreeNode* root,int sum);
return getresult(root,sum);
}
int getsum(struct TreeNode* root)
{
if(root==NULL)
return 0;
return getsum(root->left)+root->val+getsum(root->right);
}
bool getresult(struct TreeNode* root,int sum)
{
int getsum(struct TreeNode*);
if(root==NULL)
return false;
bool result=false;
if(sum==2*getsum(root))
result=true;
return getresult(root->left,sum)||result||getresult(root->right,sum);
}
还希望大家多多留言讨论下,我是一定会回复的。