题目
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 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); };