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