[leetcode]Balanced Binary Tree

经过之前的某题的经验(http://www.cnblogs.com/lautsie/p/3249723.html),这次稍微顺利了点。不过一开始没理解平衡二叉树的概念,应该是对每个左子树和右子树的高度差距不超过一,而不是所有叶子节点的高度不超过一。

算法是递归,高度是要递归算的,然后把结果作为引用去更新。

public class Solution {

    public boolean isBalanced(TreeNode root) {

        boolean[] balanced = new boolean[1];

        balanced[0] = true;

        getHeight(root, balanced);

        return balanced[0];

    }

    

    public int getHeight(TreeNode root, boolean[] balanced){

        if (root == null) return 0;

        int hl = getHeight(root.left, balanced);

        int hr = getHeight(root.right, balanced);

        if (Math.abs(hl-hr) > 1) balanced[0] = false;

        return Math.max(hl, hr) + 1;

    }

}

 在这个解答里,将boolean结果作为返回值,而高度作为引用,可以做到在false时第一时间返回。

http://blog.csdn.net/xshalk/article/details/8150030

另外有个后序遍历的方法也可以:http://zhedahht.blog.163.com/blog/static/25411174201142733927831/

你可能感兴趣的:(LeetCode)