平衡二叉树

这题我一开始单纯的以为只要分别算出树的最深度和最浅度就可以了,但是二叉平衡树会有其他情况出现,使得这样算的错误的。

这里的难点主要在于要从底部开始算起,然后一步一步往上推。
里面用到一个boolean数组来标识失败与否。
关键还是怎么返回值和终止判断条件的设定。

public class Solution {
    public boolean isBalanced(TreeNode root) {
        Boolean[] result = new Boolean[1];
        result[0] = true;
        travel(root, result);
        return result[0];
    }

    //定义,左节点和右节点深度不超过1
    public int travel(TreeNode node, Boolean[] result){
        if (node == null) return 0;
        //算出该节点以下的最大深度
        int lheight = travel(node.left, result);
        int rheight = travel(node.right, result);
        if (Math.abs(lheight - rheight) > 1){
            result[0] = false;
        }
        return Math.max(lheight, rheight) + 1;
    }
}