美文网首页
Leetcode.563 Binary Tree Tilt

Leetcode.563 Binary Tree Tilt

作者: __LINE__ | 来源:发表于2018-02-24 15:58 被阅读14次

题目求的是整个树的tilt的值而不是单个node节点的tilt值,可以通过example看出来。

分析:
一看到树,就想到用recursion。
最小子问题是,求一个节点的tilt值。
想到大概是这个形式
Math.abs(helper(root.left) - helper(root.right))
分析下怎么写function,
传入当前节点的值: 就是当前节点TreeNode root
返回的值: 当前节点值加上其所有子树值之和
需要操作的,
求出左子树之和
求出右子树之和
得到相减的绝对值即是tilt

需要存tilt,java不像c/c++可以用一个int 变量的指针,比如传入一个int &tilt来做,所以可以用一个全局变量来代替。
这里在class中的定义内部private变量tilt,每次操作 tilt += Math.abs(helper(root.left) - helper(root.right));
当我们调用helper(即traverse)之后,在整个树的所有子节点都跑过一遍,这样就能得到整个树的tilt值之和,作为结果返回就完成了。

另外,high level来看,是一个post-order traversal问题。
先traverse左
再traverse右
最后加上当前节点值,返回

思考:
如何用iterative的方式解决

public class Solution {
    int tilt = 0;
    
    public int findTilt(TreeNode root) {
        traverse(root);
        return tilt;
    }
    
    private int traverse(TreeNode root)
    {
        if(root == null) {
            return 0;
        }

        int left = traverse(root.left);
        int right = traverse(root.right);
        
        tilt += Math.abs(left - right);
        return left + right + root.val;
    }
}

相关文章

网友评论

      本文标题:Leetcode.563 Binary Tree Tilt

      本文链接:https://www.haomeiwen.com/subject/bzoqxftx.html