[路飞] 47——leetcode -110. 平衡二叉树

68 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

110. 平衡二叉树

题目分析

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

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

思路讲解

先获取二叉树的高度,左子树的高度,右子树的高度,如果两者的差值的绝对值大于1那么就是非平衡二叉树,就返回

示例

示例一

image.png

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

示例二

image.png

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

示例三

输入: root = []
输出: true

代码

/*
 * @lc app=leetcode.cn id=110 lang=javascript
 *
 * [110] 平衡二叉树
 */

// @lc code=start
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * 思路:
 * 先获取二叉树的高度,然后依次遍历左右两个子树
 * 如果不平衡返回负数
 * 如果是平衡的二叉树,就返回高度
 * @return {boolean}
 */
var isBalanced = function(root) {
  return getHeight(root) >= 0
};
// 封装函数:获取二叉树的高度
var getHeight = function (root) {
  if (!root) return 0
  let l = getHeight(root.left) // 获取左子树的高度
  let r = getHeight(root.right) // 获取右子树的高度
  if (l < 0 || r < 0) return -1
  if (Math.abs(l - r) > 1) return -1
  return Math.max(l, r) + 1
}
// @lc code=end