题目
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:true
来源:力扣(LeetCode)leetcode-cn.com/problems/ba…
解题思路
- 从树的叶子节点计算高度,所以这里使用后序遍历
- 叶子节点的左右子节点高度返回0,节点的高度等于左右子节点最大的那个节点的高度加1
- 如果左右子节点高度的绝对值大于1时返回-1
代码实现
var isBalanced = function(root) {
if(!root) return true
return height(root) >= 0
};
var height = function(root) {
//叶子节点的子节点高度为0
if (!root) return 0
const left = height(root.left)
const right = height(root.right)
if (left === -1 || right === -1) return -1
//左右子节点的绝对值大于1时返回-1
if (Math.abs(left - right) > 1) return -1
//根节点的高度为左右子节点最大高度加1
return Math.max(left, right) + 1
}
如有错误欢迎指出,欢迎一起讨论!