持续创作,加速成长!这是我参与「掘金日新计划 · 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);
};
坚持努力,无惧未来!