码迷,mamicode.com
首页 > 其他好文 > 详细

563 Binary Tree Tilt

时间:2017-07-31 22:58:24      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:sub   value   定义   abs   顺序   logs   后序遍历   返回   治法   

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: The sum of node values in any subtree wont exceed the range of 32-bit integer. All the tilt values wont exceed the range of 32-bit integer.

这道题让我们求二叉树的坡度,某个结点的坡度的定义为该结点的左子树之和与右子树之和的差的绝对值,这道题让我们求所有结点的坡度之和. 这道题最好的解法应该是用后序遍历来做,因为后序遍历的顺序是左-右-根,那么就会从叶结点开始处理,这样我们就能很方便的计算结点的累加和,同时也可以很容易的根据子树和来计算tilt,

public class Solution {
    int ans = 0;
    public int findTilt(TreeNode root) {	
        
        if (root == null) {
            return ans;
        }
        helper(root);
        return ans;
    }
    private int helper(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int leftSum = helper(root.left);
        int rightSum = helper(root.right);
        
        ans += Math.abs(leftSum - rightSum);
        return leftSum + rightSum + root.val;
    }
}

分治法原来就是后序遍历, 遍历到节点在处理, 然后返回到上层节点, 

算法: 分治, 后序遍历( 在设计求 结点的左子树之和与右子树之和的基础上, 设计全局变量分治法求的差的绝对值)

容器: 全局变量, (要明白返回值是各个节点的子节点和, 而tilt 是总的, 都在变化, 只有子节点的可以当作返回值, 然后和是各个节点的tilt 和) 所以返回值的设定是子树的和!!

563 Binary Tree Tilt

标签:sub   value   定义   abs   顺序   logs   后序遍历   返回   治法   

原文地址:http://www.cnblogs.com/apanda009/p/7265958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!