前端算法-平衡二叉树

187 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情

题目

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

输入: root = [1,2,2,3,3,null,null,4,4]
输出: false

题解

在函数中我们先声明一个递归方法getHeight,接受一个入参node,此函数可以获取出参node的高度差,我们在此函数中进行判断当前出参node是否等于null,如果是直接返回0,接下来声明一个变量leftHeight,它的值是我们将出参node左节点传给自身执行后返回过来的值,接下来进行判断当前leftHeight变量值是否等于-1,如果是则直接将leftHeight变量返回出去,在声明一个rightHeight变量,它的值是我们将出参node的右节点传给自身执行后返回过来的值,我们在判断一下rightHeight变量是否等于-1,如果是则直接将当前rightHeight变量返回出去,如果执行到这里那么就说明此刻leftHeight变量和rightHeight变量都不等于-1,我们此时用leftHeight变量减去rightHeight变量结合Math数学函数中的abs方法得出两个变量相减后的绝对值并进行判断是否大于1,如果大于1则返回-1,如果不大于1,我们这使用Math数学函数中的max方法得出leftHeight变量和rightHeight变量二者其一中的最大值,在与1相加后返回,最后我们将出参root传递进getHeight方法并将得出的返回值与-1进行相比较,在将比较过后的结果进行取反返回出去即可

/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isBalanced = function(root) {
    const getHeight = function(node){
        if(node === null){
            return 0;
        }
        let leftHeight = getHeight(node.left);
        if(leftHeight === -1){
            return leftHeight;
        }
        let rightHeight = getHeight(node.right);
        if(rightHeight === -1){
            return rightHeight;
        }
        if(Math.abs(leftHeight - rightHeight) > 1){
            return -1;
        }else{
            return  Math.max(leftHeight, rightHeight)+ 1;
        }
    }
    return !(getHeight(root) === -1);
};

坚持努力,无惧未来!