563. 二叉树的坡度


给你一个二叉树的根节点 root ,计算并返回 整个树 的坡度 。

一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。

整个树 的坡度就是其所有节点的坡度之和。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-tilt
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {

    private Info solve(TreeNode root) {
        if (root == null) {
            return new Info(0, 0);
        }
        Info left = solve(root.left);
        Info right = solve(root.right);
        int sum = left.sum + right.sum + root.val;
        int slop = Math.abs(left.sum - right.sum) + left.slop + right.slop;
        return new Info(sum, slop);
    }

    public int findTilt(TreeNode root) {
        return solve(root).slop;
    }
}

class Info {
    int sum;
    int slop;

    public Info(int sum, int slop) {
        this.sum = sum;
        this.slop = slop;
    }
}

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;
    }
}

相关