663. Equal Tree Partition

Posted jxr041100

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了663. Equal Tree Partition相关的知识,希望对你有一定的参考价值。

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.

 

 

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool checkEqualTree(TreeNode* root) {
         int sum = computeTreeSum(root);
         if(sum==0) return cnts[0]>1;
         return sum%2==0&&cnts[sum/2]>0?true:false;
    }
private:
    int computeTreeSum(TreeNode *root)
    {
        if(!root) return 0;
        int sum = root->val+computeTreeSum(root->left)+computeTreeSum(root->right);
        cnts[sum]++;
        return sum;
    }
    unordered_map<int, int> cnts;
};

 

以上是关于663. Equal Tree Partition的主要内容,如果未能解决你的问题,请参考以下文章

java 663. Equal Tree Partition.java

[leetcode-663-Equal Tree Partition]

663. Equal Tree Partition 能否把树均分为求和相等的两半

LeetCode Partition Equal Subset Sum

416 Partition Equal Subset Sum

416. Partition Equal Subset Sum