专栏首页小浩算法第40期:Keep Balance,平衡二叉树!

第40期:Keep Balance,平衡二叉树!

在之前的系列中,我们已经学习了二叉树最大深度以及DFS,如果不会可以先查看之前的文章。今天我们将对其进行应用,直接看题目。

01、题目分析

第110题:平衡二叉树

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

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

示例 1:

给定二叉树 [3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7 

返回 true 。

示例 2:

给定二叉树 [1,2,2,3,3,null,null,4,4]

       1
      / \
     2   2
    / \
   3   3
  / \
 4   4
 
返回 false 。

02、图解分析

首先分析题目,这道题思路很简单,我们想判断一棵树是否满足平衡二叉树,无非就是判断当前结点的两个孩子是否满足平衡,同时两个孩子的高度差是否超过1。那只要我们可以得到高度,再基于高度进行判断即可。

我们先复习一下之前对于树高度的求解:

这里唯一要注意的是,当我们判定其中任意一个节点如果不满足平衡二叉树时,那说明整棵树已经不是一颗平衡二叉树,我们可以对其进行阻断,不需要继续递归下去

另外,需要注意的是,下面这棵并不是平衡二叉树:

03、代码分析

根据分析,逻辑非常清晰,顺利得出代码:

func isBalanced(root *TreeNode) bool {
    if root == nil {
        return true
    }
    if !isBalanced(root.Left) || !isBalanced(root.Right) {
        return false
    }
    leftH := maxDepth(root.Left) + 1;     
    rightH := maxDepth(root.Right) + 1;   
    if abs(leftH-rightH) > 1 {
        return false
    }
    return true
}

func maxDepth(root *TreeNode) int {
    if root == nil {
        return 0
    }
    return max(maxDepth(root.Left),maxDepth(root.Right)) + 1
}

func max(a,b int) int {
    if a > b {
        return a
    }
    return b
}

func abs(a int) int {
    if a < 0 {
        return -a
    }
    return a 
}

执行结果:

内容展示:

本文分享自微信公众号 - 小浩算法(xuesuanfa),作者:程序员小浩

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自平衡二叉树实现及时间复杂度分析

    我们在遍历二叉树时,先一直往左遍历,于是我们发现,当一棵树的每个节点都只有一个子节点时,他就变成了一个链表,然后链表就说啊:

    不作声
  • 漫画:二叉树系列 第六讲(平衡二叉树)

    今日偷懒,在家忙着码代码,所以就分享一道简单点的题目~在之前的系列中,我们已经学习了二叉树的深度以及DFS,如果不会可以先查看之前的文章。今天我们将对其进行应用...

    程序员小浩
  • Python 刷题笔记:二叉树专题二

    给你一个二叉树,请你返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)。

    TTTEED
  • 亲自动手绘图——红黑树,我不信还手撕不清楚

    红黑树是自平衡的二叉查找树,在许多地方都有实际应用比如JAVA的HashMap,在链表长度大于8就会转化为红黑树;在linux经典的epoll中也使用了红黑树来...

    Java程序猿阿谷
  • 据结构与算法(十) AVL树

    因为无法改变添加删除顺序(用户操作决定),所以在每次操作之后,让二叉树达到平衡状态。

    老沙
  • 这篇 MySQL 索引和 B+Tree 讲的太通俗易懂!

    来源:https://blog.csdn.net/b_x_p/article/details/86434387

    架构师修行之路
  • 这篇MySQL索引和B+Tree讲的太通俗易懂了!!!

    正确的创建合适的索引,是提升数据库查询性能的基础。在正式讲解之前,对后面举例中使用的表结构先简单看一下:

    爱撒谎的男孩
  • MySQL的索引为什么用B+Tree?InnoDB的数据存储文件和MyISAM的有何不同?

    这篇文章的题目,是我真实在面试过程中遇到的问题,某互联网众筹公司在考察面试者MySQL相关知识的第一个问题,我当时还是比较懵的,没想到这年轻人不讲武德,不按套路...

    纪莫
  • 【MySQL一】开发人心里都该有的那颗 B 树

    对该二叉树的节点进行查找发现深度为1的节点的查找次数为1,深度为2的查找次数为2,深度为n的节点的查找次数为n,因此其平均查找次数为(1+2+2+3+3+3) ...

    周三不加班

扫码关注云+社区

领取腾讯云代金券