Skip to content

110 平衡二叉树

给定一个二叉树,判断它是否是 平衡二叉树

平衡二叉树的定义:是指该树所有节点的左右子树的深度相差不超过 1。

递归解法

递归三部曲,

递归的参数和返回值,

参数是根节点,返回值是最大高度或者-1(表示已经不是平衡二叉树了)

递归的终止条件

当节点为0时,返回高度0

递归的单层逻辑

javascript
//左子树的最大高度或者是-1
const leftTreeMaxHeightOrMinusOne = isBalanced(root.left)
if(leftTreeMaxHeightOrMinusOne === -1){
    return -1
}
const rightTreeMaxHeightOrMinusOne = isBalanced(root.right)
if(rightTreeMaxHeightOrMinusOne === -1) {
    return -1
}

//如果都有高度的话,看是否超过1
if(Math.abs(leleftTreeMaxHeightOrMinusOne - rightTreeMaxHeightOrMinusOne) > 1) {
    return -1
} else {
    //否则就是要返回当前树的最大高度用来和其他树比较
    return 1 + Math.max(leleftTreeMaxHeightOrMinusOne, rightTreeMaxHeightOrMinusOne)
}

那么整体的算法就如下:

javascript
var isBalanced = function (root) {
    var isBalancedPostOrder = function (root) {
        if (!root) {
            return 0
        }
        //左子树的最大高度或者是-1
        const leftTreeMaxHeightOrMinusOne = isBalancedPostOrder(root.left)
        if (leftTreeMaxHeightOrMinusOne === -1) {
            return -1
        }
        const rightTreeMaxHeightOrMinusOne = isBalancedPostOrder(root.right)
        if (rightTreeMaxHeightOrMinusOne === -1) {
            return -1
        }

        //如果都有高度的话,看是否超过1
        if (Math.abs(leftTreeMaxHeightOrMinusOne - rightTreeMaxHeightOrMinusOne) > 1) {
            return -1
        } else {
            //否则就是要返回当前树的最大高度用来和其他树比较
            return 1 + Math.max(leftTreeMaxHeightOrMinusOne, rightTreeMaxHeightOrMinusOne)
        }
    }
    return isBalancedPostOrder(root) === -1 ? false : true
};

上次更新于: