剑指offer:平衡二叉树

1、题目描述:

输入一棵二叉树,判断该二叉树是否是平衡二叉树。

2、解题思路:

(1)平衡二叉树是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

(2)根据概念,我们需要判断左右子树的高度相差是否超过,并且还要判断左右子树是否是平衡二叉树。

3、JavaScript实现:

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
// 判断二叉树的深度
function TreeDepth(root){
    if(root === null){
        return 0;
    }
    var leftLen = TreeDepth(root.left);
    var rightLen = TreeDepth(root.right);
    return leftLen > rightLen ? leftLen + 1 : rightLen + 1;
};
function IsBalanced_Solution(root)
{
    // 空树也是平衡二叉树
    if(root === null){
        return true;
    }
    // 左右子树的高度差应该小于1,否则便不是平衡二叉树
    var leftLen = TreeDepth(root.left);
    var rightLen = TreeDepth(root.right);
    var lenDif = leftLen - rightLen;
    if(lenDif > 1 || lenDif < -1){
        return false;
    }
    // 左右子树,同样要满足是二叉树的要求,否则便不是平衡二叉树
    return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
}

 

posted @ 2017-03-26 22:51  一叶芝秋  阅读(248)  评论(0编辑  收藏  举报