[路飞]_LeetCode_110. 平衡二叉树

189 阅读1分钟

题目

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

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

示例 1:

image.png

输入:root = [3,9,20,null,null,15,7]
输出:true

来源:力扣(LeetCode)leetcode-cn.com/problems/ba…

解题思路

  1. 从树的叶子节点计算高度,所以这里使用后序遍历
  2. 叶子节点的左右子节点高度返回0,节点的高度等于左右子节点最大的那个节点的高度加1
  3. 如果左右子节点高度的绝对值大于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
}

如有错误欢迎指出,欢迎一起讨论!