563-Binary Tree Tilt

kevin聰發表於2018-04-30

Description

Given a binary tree, return the tilt of the whole tree.

The tilt of a tree node is defined as the absolute difference between the sum of all left subtree node values and the sum of all right subtree node values. Null node has tilt 0.

The tilt of the whole tree is defined as the sum of all nodes’ tilt.


Example:

Input: 
         1
       /   \
      2     3
Output: 1
Explanation: 
Tilt of node 2 : 0
Tilt of node 3 : 0
Tilt of node 1 : |2-3| = 1
Tilt of binary tree : 0 + 0 + 1 = 1

Note:

  1. The sum of node values in any subtree won’t exceed the range of 32-bit integer.
  2. All the tilt values won’t exceed the range of 32-bit integer.

問題描述

給定二叉樹, 返回整棵樹的tilt

一個節點的tilt為其左子樹節點之和與右子樹節點之和的差值的絕對值。空節點的tilt為0

整棵樹的tilt為其所有子節點的tilt之和


問題分析

後續遍歷, 求出當前節點的左子樹之和left, 右子樹之和right, 累加left - right的絕對值, 返回left + right + root.val(root為當前節點)


解法

class Solution {
    private int tilt = 0;

    public int findTilt(TreeNode root) {
        getSum(root);

        return tilt;
    }

    public int getSum(TreeNode root){
        if(root == null) return 0;

        int left = getSum(root.left);
        int right = getSum(root.right);
        tilt += Math.abs(left - right);

        return left + right + root.val;
    }
}