0563. Binary Tree Tilt

0563. Binary Tree Tilt #

题目 #

  • 给定二叉树根节点 root ,计算并返回 整个树 的坡度 。
  • 一个树的 节点的坡度 定义为,该节点左子树的节点之和右子树节点之和差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0
  • 整个树 的坡度是其所有节点的坡度之和。

思路 #

递归 #

代码 #

递归 #

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode() {}
    TreeNode(int val) { this.val = val; }
    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}
class Solution {
    public int sum(TreeNode root, List<Integer> tilt) {
        if (root == null) return 0;
        int leftSum = sum(root.left, tilt);
        int rightSum = sum(root.right, tilt);
        tilt.add(Math.abs(leftSum - rightSum));
        return leftSum + rightSum + root.val;
    }
    public int findTilt(TreeNode root) {
        List<Integer> tilt = new ArrayList<>();
        sum(root, tilt);
        int ans = 0;
        for (int val: tilt) ans += val;
        return ans;
    }
}