Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图解LeetCode——剑指 Offer 55 - II. 判断是否是平衡二叉树

图解LeetCode——剑指 Offer 55 - II. 判断是否是平衡二叉树

作者头像
爪哇缪斯
修改于 2023-07-13 15:01:01
修改于 2023-07-13 15:01:01
23700
代码可运行
举报
文章被收录于专栏:爪哇缪斯爪哇缪斯
运行总次数:0
代码可运行

一、题

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。

二、示例

2.1> 示例 1:

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

2.2> 示例 2:

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

2.3> 示例 3:

【输入】root = [] 【输出】true

提示:

  • 0 <= 树的结点个数 <= 10000

三、解题思路

根据题目描述,我们要通过遍历二叉树的节点来获取任意节点的左右子树的深度,然后如果发现,只要这个深度之差超过1了,那么就不是平衡二叉树了。其实本题的解法,与《剑指 Offer 55 - I. 二叉树的深度》这道题基本类似,只是多了一个步骤,即:用于校验左右子树的深度差而已。

下面我们采用深度遍历的方式来解题,由于二叉树的深度是需要根据左子树深度和右子树深度进行差值计算来判断是否大于1,所以我们采用深度遍历中的后序遍历方式,即:先遍历左子树,然后遍历右子树,最后遍历子树的根节点。那么它的代码模型是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void dfs(TreeNode node) {
    ... ...
    dfs(root.left); // 遍历左子树
    dfs(root.right); // 遍历右子树
    node // 遍历根节点
    ... ...    
}

除了上面的遍历方式外,我们可以创建一个全局变量boolean isBalanced,默认值为true,用于表示当前二叉树是否为平衡二叉树。那么在遍历过程中,我们的中断条件有如下两种情况,即:

情况1】在dfs(...)方法中,传入的Node为空,则直接结束当前这个分支的遍历。 【情况2】当发现isBalanced等于false的时候,则直接结束当前这个分支的遍历。

上面就是本道题的解题思路了。还是按照惯例,下面我们以输入root = [1,2,2,3,3,null,null,4,4]为例,看一下具体的处理过程。请见下图所示:

四、代码实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    boolean isBalanced = true;
    public boolean isBalanced(TreeNode root) {
        dfs(root);
        return isBalanced;
    }
    public int dfs(TreeNode node) {
        if (node == null || !isBalanced) return 0;
        int lDepth = dfs(node.left);
        int rDepth = dfs(node.right);
        if (Math.abs(lDepth - rDepth) > 1) isBalanced = false;
        return Math.max(lDepth + 1, rDepth + 1);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爪哇缪斯 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Leetcode No.110 平衡二叉树
示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:true
week
2021/05/06
2770
【leetcode刷题】T121-平衡二叉树
https://leetcode-cn.com/problems/balanced-binary-tree/
木又AI帮
2019/07/24
4270
【小Y学算法】⚡️每日LeetCode打卡⚡️——30.平衡二叉树
这道题中的平衡二叉树的定义是:二叉树的每个节点的左右子树的高度差的绝对值不超过 11,则二叉树是平衡二叉树。
呆呆敲代码的小Y
2021/09/14
3020
【小Y学算法】⚡️每日LeetCode打卡⚡️——30.平衡二叉树
LeetCode-面试题55-2-平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
benym
2022/07/14
1950
LeetCode 平衡二叉树(二叉树)
给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为:
SakuraTears
2022/01/13
3650
LeetCode 平衡二叉树(二叉树)
Leetcod刷题(15)—— 110. 平衡二叉树
解决思路: 1.先写一个能求二叉树深度的方法 2.比较左右子树的深度差是否小于等于1 3.递归求解即可
老马的编程之旅
2022/06/22
1800
golang刷leetcode 技巧(21)平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
golangLeetcode
2022/08/02
2040
LeetCode-110. 平衡二叉树(java)
       根据本题对平衡二叉树的定义:如果二叉树的每个节点的左右子​​树的高度​​差的绝对值不超过 1,则是平衡二叉树。根据题目定义,解题思路如涌泉般喷发,老规矩,递归破题(若一棵二叉树是平衡二叉树,必须满足其所有子树也都是平衡二叉树才行),且递归的顺序可以是自顶向下或者自底向上,如上两种递归顺序我都给大家讲解一下。
bug菌
2023/05/27
2190
LeetCode-110. 平衡二叉树(java)
平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
WindRunnerMax
2022/05/06
2460
日拱算法之判断平衡二叉树
接上一篇《AVL 树旋转及 JS 实现,平衡树支棱起来~》,来了个难的,再来个相对简单的,别一直搁那“旋转树”而打击了“种二叉树”的自信心~~
掘金安东尼
2022/09/19
2240
图解LeetCode——剑指 Offer 55 - I. 二叉树的深度
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
爪哇缪斯
2023/05/10
1690
图解LeetCode——剑指 Offer 55 - I. 二叉树的深度
判断二叉树是否为平衡二叉树
解题思路: 根据二叉树的定义,我们可以递归遍历二叉树的每一个节点来,求出每个节点的左右子树的高度,如果每个节点的左右子树的高度相差不超过1,按照定义,它就是一颗平衡二叉树。
恋喵大鲤鱼
2018/08/03
1.8K0
判断二叉树是否为平衡二叉树
一天一大 lee(平衡二叉树)难度:简单-Day20200817
题目:: https://leetcode-cn.com/problems/balanced-binary-tree/
前端小书童
2020/09/24
3290
一天一大 lee(平衡二叉树)难度:简单-Day20200817
​LeetCode刷题实战110:平衡二叉树
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
2820
​LeetCode刷题实战110:平衡二叉树
平衡二叉树判断
平衡二叉树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。
名字是乱打的
2022/05/13
1960
漫画:二叉树系列 第六讲(平衡二叉树)
今日偷懒,在家忙着码代码,所以就分享一道简单点的题目~在之前的系列中,我们已经学习了二叉树的深度以及DFS,如果不会可以先查看之前的文章。今天我们将对其进行应用,直接看题目:
程序员小浩
2020/03/30
3050
漫画:二叉树系列 第六讲(平衡二叉树)
剑指Offer(三十九)-- 平衡二叉树
输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
秦怀杂货店
2022/02/15
3300
剑指Offer(三十九)-- 平衡二叉树
判断是不是平衡二叉树
输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
秦怀杂货店
2022/02/17
1.2K0
判断是不是平衡二叉树
leetcode树之平衡二叉树
这里采用递归的解法,当root为null的时候返回0,之后递归计算root.left的高度lh,及root.right的高度rh,然后判断左右子树的高度差是否小于等于1,是的话返回该节点的高度,否则返回-1
code4it
2020/09/19
4090
leetcode树之平衡二叉树
C语言每日一题(56)平衡二叉树
找出左右子树的高度,如果高度差出现大于一的情况就返回false,从根节点开始,先从左子树找,再去右子树找
对编程一片赤诚的小吴
2024/02/14
1220
C语言每日一题(56)平衡二叉树
相关推荐
Leetcode No.110 平衡二叉树
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档