【LeetCode(Java) - 663】均匀树划分

1、题目描述

在这里插入图片描述

2、解题思路

  本题要求是拆分成两棵树,两棵树的元素和一样。

  先求出整棵树的元素和 sum;

  于是问题就变为:是否存在子树,它的元素和为 sum/2 。

3、解题代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    
    
     List<Integer> list = new ArrayList<>();
    
    public boolean checkEqualTree(TreeNode root) {
    
    
        int all = sum(root);
        // 总和是奇数,不可能分成两个和相等的二叉树
        if (all % 2 != 0) return false;
        int half = all / 2;
        // 现在问题转化为:root 树是否存在元素和为 half 的子树
        list.remove(list.size()-1);     // 求子树,不要把 root 算进去
        return list.contains(half);
    }

    /**
     * 求二叉树的元素总和
     *
     * @param node
     * @return
     */
    public int sum(TreeNode node) {
    
    
        int ans = node.val;
        if (node.left != null) ans += sum(node.left);
        if (node.right != null) ans += sum(node.right);
        list.add(ans);  // 顺便记下 node 子树和
        return ans;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_29051413/article/details/108559969