【剑指offer】--- 判断一颗二叉树是否为平衡二叉树

剑指offer—关于判断二叉树是否为平衡二叉树 判断一颗二叉树是否为平衡二叉树,当这到面试题摆在我们眼前的时候,我们需要进行思考,二叉树满足平衡二叉树的条件是什么,就是对于每一个节点,它的右子树深度减去左子树的深度的绝对值必须是小于2才行。对于这个深度差,我们也叫做平衡因子。所以,根据上面的条件,我们可以进行一种最简单的思路,就是我们首先可以对每一个节点进行遍历,然后看它的平衡因子进行比较判断,看它是不是合法。 bool _IsAVLBin 阅读详情

了解平衡二叉树

首先,平衡二叉树,也叫平衡二叉搜索树,即AVL树;其具有以下特点:

①:它是一颗空树;

②:或者它的左右高度差不超过1,并且其左右两颗树都是平衡二叉树;

③:其高度一般都维持在O(log(n)),也就是其搜索时间复杂度;

题目描述


           输入一棵二叉树,判断该二叉树是否是平衡二叉树。


思路

           首先,可以根据其性质去判断,要满足其性质,所以要么它是一颗空数或者左右子树差最多为1,并且左子树是一颗二叉树,右子树也是一颗二叉树。可以用递归去做这一道题;

代码实现如下

public boolean IsBalanced_Solution(TreeNode root) {
       if(root == null){
          return true;
       }
       
       return Math.abs(maxDepth(root.left)-maxDepth(root.right))<=1 && IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
}

private int maxDepth(TreeNode root){
        if(root == null){
             return 0; 
        }
        return 1+Math.max(maxDepth(root.left),maxDepth(root.right));
}

由于上面的代码实现递归左右节点的时候,下层节点多次被判断,时间复杂度较低,我们可以采用以下方式,这种方式的好处只要一个“子树”不满足条件,直接终止,返回-1;

代码实现如下

 public boolean IsBalanced_Solution(TreeNode root) {
       return getDepth(root)!=-1;
    }
    
    private int getDepth(TreeNode root){
        if(root == null){
            return 0;
        }
        //递归我左节点
        int left = getDepth(root.left);
        if(left == -1){
            return -1;
        }
        //递归我右节点
        int right = getDepth(root.right);
        if(right == -1){
            return -1;
        }
        //左右节点高度如果大于1,那么就返回-1,反之返回左右的最大高度+1
        return Math.abs(left-right)>1?-1:1+Math.max(left,right);
    }

 

判断二叉树是否是平衡二叉树 判断一颗二叉树是不是平衡二叉树,数据结构算法 立即下载

相关推荐

判断两颗二叉树是否相似(C语言)

判断两颗二叉树是否相似,C语言二叉树部分入门小程序,适合C语言课程的入门小练习 判断两颗二叉树是否相似,C语言二叉树部分入门小程序,适合C语言课程的入门小练习 判断两颗二叉树是否相似,C语言二叉树部分入门小程序,适合C语言课程的入门小练习

剑指offer(Python)判断一棵二叉树是否是平衡二叉树

判断一棵二叉树是否是平衡二叉树

storyfull 1198

FreeCAD源码分析:Sketcher模块

Sketcher模块基于Part模块功能实现了特征编辑(Feature Editing)建模的功能。这类参数化建模系统主要包括几何表示、约束求解器等两大组成部分。

国产CAx(CAD/CAE/CAM)软件研发 6524

判断一颗二叉树是否为平衡二叉树

一.判断一颗二叉树是否为平衡二叉树 题目:输入一颗二叉树的根节点,判断该二叉树是否为平衡二叉树。所谓的平衡二叉树是指以当前结点为根结点的树,左右子树的深度不得超过1。 例如: 解决思路一:按照前序遍历的路线判断。 1.判断以根结点的树是否为二叉平衡树。求出左右子树的高度,判断它们的高度差是否超过了1。 2.递归判断根的左子树是否为平衡二叉树 3.递归判断根的右子树是否...

HanSion.Z 3万+

基于Codex平台与AI Agent技能开发,实现抖音爆款视频分析与脚本自动生成

大家好,我是专注于AI应用开发的技术博主。最近在探索如何利用AI工具自动化内容创作时,我发现了一个非常有趣的组合:通过Codex平台创建自定义的Skill(技能),来批量分析抖音平台的爆款视频,并基于分析结果自动生成新的带货视频脚本。这听起来像是内容团队的“黑科技”,但实现起来其实有清晰的路径可循。本文将为你完整拆解这个实战项目,从环境搭建、Skill编写、数据抓取到视频脚本生成,手把手教你打造自己的“AI内容助理”。无论你是想了解AI Agent的开发,还是对短视频自动化创作感兴趣,都能从本文中获得可直接

weixin_34110749的博客 644

面板数据分析中的随机前沿软件FRONTIER Version 4.1应用

随机前沿模型是一种用于评估单位效率的统计方法。它考虑了输入和输出的随机性,允许我们在效率评估中引入不确定性。随机前沿模型通常用于评估生产单位、金融机构、医院等各种类型的决策单元的效率。FRONTIER是一个广泛使用的随机前沿分析软件,具有用户友好的界面和强大的功能。它提供了估计效率、前沿分析和模型比较的工具,使用户能够深入研究单位的效率和绩效。面板数据是一种包含多个单位(通常是时间序列数据)的数据类型,可以用于分析单位在不同时间点的变化和效率。

目标检测专栏持续更新中,改进YOLO系列通用,适用v5、v7、v8、所有博客均是团队原创博客,所有文章禁止转载,违者必究。 2982

每日一题之二叉树

描述 输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 样例解释: 样例二叉树如图,为一颗平衡二叉树 注:我们约定空树是平衡二叉树。 数据范围:n \le 100n≤100,树上节点的val值满足0 \le n \le 10000≤n≤1000 要.

m0_50290125的博客 1580

BGE-Reranker-v2-M3介绍

重排序模型介绍

吉米_王 5894

判断一个二叉树是否是平衡二叉树

题目: 题目链接:力扣https://leetcode-cn.com/problems/balanced-binary-tree/ 110. 平衡二叉树 难度简单991 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1 。 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:true 示例 2: 输入:root = [1,2,2,3,3.

Morning Sunshine的IT技术博客 4841

招行收款通SM2加密解密全流程解析:PHP开发者必看

本文详细解析了招商银行收款通服务中SM2加密解密的完整流程,特别针对PHP开发者提供了从密钥管理到签名验签的实战指南。涵盖国密算法基础、PHP环境配置、密钥安全存储及生产环境优化方案,帮助开发者快速实现高安全性的支付系统集成。

weixin_30632089的博客 651

大数据开发工程师必备面试题与解答

大数据开发岗位一直是互联网行业的热门方向,面试过程中既考察基础知识,也关注实际项目经验和问题解决能力。本文整理了等核心组件相关的高频面试题及参考解答,帮助大家高效准备面试。大数据面试不仅考察基础理论,更看重项目经验与问题解决能力。本文涵盖了等核心知识点及调优思路,希望能帮助你在面试中游刃有余。

X2829352498的博客 304

判断是否是平衡二叉树

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过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...

a1085653724的博客 3442

第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案

本文主要介绍了第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案,希望能对使用OpenClaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

【面试题】剑指Offer-39-求二叉树的深度和判断一颗树是否为平衡二叉树

题目概述 题目1:求二叉树的深度 题目2:判断一颗二叉树是否为平衡二叉树 解题思路 求二叉树的深度 二叉树的深度呢,这个问题比较简单 递归遍历一遍二叉树,每到一个节点,便返回左子树和右子树深度较大的那个 并+1返回 判断一颗树是否为平衡二叉树 这里呢,也要用到深度 所谓的平衡二叉树,就是左子树的深度和右子树的深度相差的绝对值小于2 每到一个节点,便定义

皓皓松的博客 811

彻底解决Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

renkai721的专栏 24万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

剑指Offer——平衡二叉树

题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路: 平衡二叉树任何一个节点的左右子树高度差不大于1,因此有一个左右子树求高度差的过程。所以存在两个递归,一个是高度的递归,另一个是高度差判断的递归。 java代码如下: public class Solution { public boolean IsBalanced_Solution(TreeNode root) ...

weixin_42259631的博客 474

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

剑指offer面试题之判断一颗二叉树是不是平衡二叉树

1,题目: 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 2,思想: 考虑树为空的情况; (1)算左右子树的深度,再相减,若等于-1,1和0即为平衡二叉树,若不是则为否。 则问题就转化为了求一颗树的深度了。 在牛客网上的编码为: class Solution { public: int depthofnode(TreeNode* p){ if (p ==

记录每一个小阶段的学习心得,持之以恒! 650

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

剑指offer系列——剑指 Offer 55 - II. 平衡二叉树

大家好!本篇文章将介绍的剑指offerOJ题,来自力扣[剑指 Offer 55 - II. 平衡二叉树]题解,本文将以二叉树的概念以及二叉树深度为基础,以该题为背景介绍平衡二叉树,展示代码语言暂时为:Java,C/C++。

未见花闻的博客 2140

剑指Offer 判断二叉树是否是平衡二叉树

剑指Offer 判断二叉树是否是平衡二叉树 题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。 解题步骤: 我们需要知道什么是平衡二叉树?平衡二叉树的特点? 平衡二叉树定义(AVL): (1)它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1 (2)它的左子树和右子树都是一颗平衡二叉树。 所以,我们可以采用递归的方式求出左右子树的深度差进行判断,并且递归遍历所有左右子节点。 不过该解法...

张毅的博客 264

剑指offer之平衡二叉树

剑指offer之平衡二叉树 题目描述解题思路Code 题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 解题思路 平衡二叉树成立的条件,左右子树的深度差不超过1。采用后序遍历可以避免访问重复的结点。 Code class Solution { public: bool IsBalanced(TreeNode* pRoot, int *pDepth) { if(...

gq__97的博客 392

【剑指offer】判断二叉树平衡

题目:输入一个二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 剑指offer上给的第二种思路,用后序遍历真的是将递归发挥的淋漓尽致,先遍历节点的左右子树,左右子树都平衡才来判断该节点是否平衡,如果左右子树中有不平衡的,则直接返回false,避免了从上往下逐个节点地计算深度带来的重复遍历节点。 代码如下:

兰亭风雨的专栏 3760

剑指 Offer — 平衡二叉树

复仇Bytedance之路 题目描述: 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过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.

Lucius 3152

剑指offer—平衡二叉树

剑指offer—平衡二叉树 题目描述 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过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

八吨车的博客 171

剑指Offer刷题(平衡二叉树)

剑指Offer刷题(平衡二叉树)一.题目描述二.代码(C++)三.提交记录四.备注 一.题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 二.代码(C++) class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { return depth(pRoot)!=-1; } int depth(TreeNode* root)

Umbraner的博客 213

剑指offer-平衡二叉树

剑指offer-平衡二叉树题目描述解题思路代码块 题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 解题思路 如何判断是一个平衡二叉树。 1、对根结点,左子树的高度-右子树的高度差的绝对值不能超过1; 2、对左子树的结点和右子树的结点都满足上述要求,叫做平衡二叉树。 代码块 public class Solution { public boolean IsBalanced_Solu...

liqiao96的博客 161

【剑指Offer刷题系列】判断平衡二叉树

输入一棵二叉树的根节点,判断该树是不是 平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过 1,那么它就是一棵平衡二叉树。输入: 输出: 解释:如下图所示的二叉树是平衡的: 示例 2: 输入: 输出: 解释:如下图所示的二叉树不是平衡的,因为某些节点的左右子树深度相差超过了 1: 提示 原题链接:https://leetcode.cn/problems/ping-heng-er-cha-shu-lcof/description/ 及 https://leetcode-cn.com/probl

weixin_44329069的博客 902
上一篇: 【剑指offer】--- 合并两个已排序的链表
下一篇: 【剑指offer】 --- 和为S的两个数
Beat_Boxer
博客等级 码龄9年 18粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值