前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一天一大 lee(平衡二叉树)难度:简单-Day20200817

一天一大 lee(平衡二叉树)难度:简单-Day20200817

作者头像
前端小书童
发布2020-09-24 14:26:16
2890
发布2020-09-24 14:26:16
举报
文章被收录于专栏:前端小书童前端小书童

题目:[1]

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

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

示例

  1. 示例 1 给定二叉树 [3,9,20,null,null,15,7]
代码语言:javascript
复制
    3
   / \
  9  20
    /  \
   15   7

返回 false

  1. 示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]
代码语言:javascript
复制
       1
      / \
     2   2
    / \
   3   3
  / \
 4   4

返回 false

抛砖引玉

抛砖引玉

二叉树遍历,递归

  • 参数,要检查是否平衡的节点
  • 返回:
    • 为空,返回 true
    • 不为空,需要判断左右节点的子节点是否平衡且子节点高度差值是否<=1

自顶向下的递归

从根节点递归 逐个节点计算其子节点高度

代码语言:javascript
复制
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isBalanced = function (root) {
  if (!root) return true
  return Math.abs(height(root.left) - height(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right);

  // 计算传入节点的高度 => 左子节点+右子节点高度
  function height(node) {
    if (!node) return 0
    return Math.max(height(node.left), height(node.right))+1
  }
}

自底向上的递归

  • 逐层计算子节点左右子节点的高度数时直接判断该子节点是否平衡,如果不平衡则整个二叉树都不可能是平衡二叉树
代码语言:javascript
复制
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isBalanced = function (root) {
  return height(root) >= 0;

  function height(node) {
    if (!node) return 0
    let left = height(node.left),
        right = height(node.right);
    // 存在左右节点高度差值大于1的节点,则整个二叉树都不可能是平衡二叉树
    if (left === -1 || right === -1 || Math.abs(left - right) > 1) {
      return -1;
    } else {
      // 如果节点平衡返回节点高度
      return Math.max(left, right) + 1;
    }
  }
}

[1]

题目:: https://leetcode-cn.com/problems/balanced-binary-tree/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小书童 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例
  • 抛砖引玉
    • 自顶向下的递归
      • 自底向上的递归
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档