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

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

转载请注明出处:http://blog.youkuaiyun.com/ns_code/article/details/27242575

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

    剑指offer上给的第二种思路,用后序遍历真的是将递归发挥的淋漓尽致,先遍历节点的左右子树,左右子树都平衡才来判断该节点是否平衡,如果左右子树中有不平衡的,则直接返回false,避免了从上往下逐个节点地计算深度带来的重复遍历节点。

    代码如下:

#include<stdio.h>
#include<stdlib.h>

typedef struct BTNode
{
	char data;
	struct BTNode *pLchild;
	struct BTNode *pRchild;
}BTNode, *BTree;

BTree create_tree();
bool IsBalanced(BTree,int *);
bool IsBalanced(BTree);

int main()
{
	BTree pTree = create_tree();
	if(IsBalanced(pTree))
		printf("Balanced\n");
	else
		printf("Not Balanced\n");

	return 0;
}

BTree create_tree()
{
	BTree pA = (BTree)malloc(sizeof(BTNode));
	BTree pB = (BTree)malloc(sizeof(BTNode));
	BTree pD = (BTree)malloc(sizeof(BTNode));
	BTree pE = (BTree)malloc(sizeof(BTNode));
	BTree pC = (BTree)malloc(sizeof(BTNode));
	BTree pF = (BTree)malloc(sizeof(BTNode));


	pA->data = 'A';
	pB->data = 'B';
	pD->data = 'D';
	pE->data = 'E';
	pC->data = 'C';
	pF->data = 'F';
	
	pA->pLchild = pB;
	pA->pRchild = pC;
	pB->pLchild = pD;
	pB->pRchild = pE;
	pD->pLchild = NULL;
	pD->pRchild = NULL;
	pE->pLchild = pE->pRchild = NULL;
	pC->pLchild = NULL;
	pC->pRchild = pF;
	pF->pLchild = pF->pRchild = NULL;	
	
	return pA;
}


/*
后续递归遍历判断二叉树是否平衡
*/
bool IsBalanced(BTree pTree,int *depth)
{
	if(pTree == NULL)
	{
		*depth = 0;
		return true;
	}

	int leftDepth,rightDepth;
	if(IsBalanced(pTree->pLchild,&leftDepth) && IsBalanced(pTree->pRchild,&rightDepth))
	{
		int diff = leftDepth-rightDepth;
		if(diff<=1 && diff>=-1)
		{
			*depth = (leftDepth>rightDepth ? leftDepth:rightDepth) + 1;
			return true;
		}
	}
	return false;
}

/*
封装起来
*/
bool IsBalanced(BTree pTree)
{
	int depth = 0;
	return IsBalanced(pTree,&depth);
}
    测试结果:



剑指 offer代码解析——面试题39判断平衡二叉树(高效方法) 题目:输入一颗二叉树的根结点,判断该树是不是平衡二叉树。 如果某二叉树中任意结点的左右子树的高度相差不超过1,那么它就是一棵平衡二叉树。 分析:所谓平衡二叉树就是要确保每个结点的左子树与右子树的高度差在-1到1之间。 由于之前一题已经给出了二叉树高度的计算方法,因此本题最直观的思路就是分别计算每个结点的左子树高和右子树高,从而判断一棵树的所有结点是否均为平衡二 阅读详情

相关推荐

PDF批量加水印 与 去除水印实践

我们可以给PDF加图片水印或文字水印,要去除图片水印,一般只需要删除最后一个图片对象即可。要去除文字水印,需要保证主体内容和文字水印在/Contents中位于不同的对象内,这样我们只需要删除文字水印对应的对象即可删除水印。而对于主体内容和文字水印已经混合在一个对象时,本文的提供的方法则无能为力,需要进一步深入分析PDF细节。

小小明-代码实体的专栏 2762

剑指 Offer 55 - II. 平衡二叉树

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。给定二叉树 [3,9,20,null,null,15,7]3/ \9 20/ \15 7返回 true。给定二叉树 [1,2,2,3,3,null,null,4,4]1/ \2 2/ \3 3/ \4 4返回 false。0

kashine的博客 215

海康威视HiTools实战:5分钟搞定工业镜头选型(附避坑指南)

本文详细解析了海康威视HiTools在工业镜头选型中的应用,通过五步操作流程帮助用户快速匹配适合的镜头型号。文章深入探讨了工业视觉系统的核心参数,包括焦距、视野、景深和畸变控制,并提供了光源搭配和系统集成的实战指南,助力提升机器视觉检测精度与效率。

u0v1w2x3的博客 1059

每日算法题 | 剑指offer 二叉树专题 (16) 平衡二叉树

点击上方“Jerry的算法和NLP”,选择“星标”公众号 重磅干货,第一时间送达题目平衡二叉树题目要求输入一棵二叉树,判断该二叉树是否是平衡二叉树。| 备知识 平衡二叉树...

Jerry的编程之路 227

【光子AI / Photon.AI】manus 通用 Agent 的实现核心技术原理与应用

摘要 Manus是一款由国内团队开发的通用AI Agent,其核心技术原理基于多智能体协作架构、云端全能沙箱、规划-执行-反思循环等系统工程方法。与传统的对话式AI不同,Manus能够在独立的Linux虚拟机环境中自主规划并执行复杂任务,通过编写和运行代码来解决问题,具备强大的纠错能力和工具使用能力。 核心应用场景包括深度行业研究、自动化办公、生活助理、辅助编程和跨平台信息整合等。Manus的工程化落地优势体现在沙箱环境、多智能体调度和容错机制等方面,使其能够完成需要多步骤操作和多种工具调用的复杂任务,将A

AI天才研究院 668

从生产订单到整车交付,SAP 离散制造在汽车行业里的真实落点

汽车行业谈数字化,很容易一上来就谈智能工厂、数字孪生、AI 排产、无人仓、视觉质检。可落到 SAP 项目现场,真正把工厂撑起来的,往往还是几个很朴素的问题,客户订单来了以后,BOM 能不能准确展开,物料能不能准时到线,产能有没有被过度承诺,生产订单能不能被车间正确执行,质量问题能不能追溯,成本能不能按工单和批次沉淀下来。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 114

剑指offer | 面试题55 - II. 平衡二叉树

转载本文章请标明作者和出处 本文出自《Darwin的程序空间》 本文题目和部分解题思路来源自《剑指offer》第二版 开始行动,你已经成功一半了,献给正在奋斗的我们 题目 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树; 给定如图的二叉树,返回true; 解题分析 什么是平衡二叉树,在题干中就给出了解释;所谓平...

程序员大航子 2708

Hermes 教程 05:多 Agent 编排

本文介绍了Hermes v0.13.0中的四种多Agent协作模式:1)delegate_task快速子任务模式,适合2-3个独立并行任务;2)spawn子Agent模式,实现零成本并行多步流水线;3)tmux交互子Agent模式,支持长期自主任务;4)全新Kanban看板系统,提供持久化AI团队协作框架。各模式在隔离级别、时长、工具访问和适用场景上存在差异,其中spawn模式通过独立上下文窗口实现零上下文成本。文章详细说明了每种模式的使用方法、限制条件和典型应用场景,并提供了具体代码示例和可视化流程图。K

程序猿_三产 537

剑指Offer55-Ⅱ—平衡二叉树

剑指Offer55-Ⅱ—平衡二叉树

qq_39172845的博客 248

利用Gretna软件计算脑网络的全局属性和局部属性指标

使用Gretna,你可以计算脑网络的全局属性指标(如网络特征、小世界性和模块度),以及局部属性指标(如节点度和聚类系数)。通过Gretna,你可以计算脑网络的稀疏度,并进一步探索网络的特征和特性。Gretna是一款基于MATLAB平台的脑网络分析工具,它提供了丰富的函数和工具箱,用于计算和分析脑网络的结构和功能。在脑网络中,较高的稀疏度可能意味着神经系统的高效性和信息处理能力,因为较少的连接可以降低信息传递的成本。连接矩阵是一个N*N的矩阵,其中N表示节点的数量,矩阵的每个元素表示节点之间的连接强度。

code_program481的博客 1809

YOLO26 FP16/INT8混合量化实战:精度无损+速度拉满,边缘设备部署最优解

这是混合量化的灵魂,告诉量化器:哪些层不准动,保留FP16。"""判断是否为量化敏感层 → 是则豁免为FP16返回 True=敏感层(FP16),False=可量化(INT8)"""# 1. 检测头回归分支# 2. 小通道1×1卷积# 3. SiLU 激活# 4. 残差ShortcutYOLO26想要在Jetson、RK3588、昇腾、嵌入式NPU上真正落地,FP16/INT8混合量化是唯一最优解。它的核心逻辑不是玄学,而是工程上的精准取舍能量化的层,全部INT8榨性能;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 747

剑指offer:判断二叉树是不是平衡二叉树(java)

题目:输入一棵二叉树的根节点,判断该树是不是平衡的二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。     有了求二叉树的深度的经验之后再解决这个问题,我们很容易就能想到一个思路:在遍历树的每个结点的时候,调用函数TreeDepth得到它的左右子树的深度。如果每个结点的左右子树的深度相差不超过1,按照定义它就是一棵平衡的二叉树。这种思路实现的代码如下:

abc7845129630的博客 9613

分享一份小度在家1C系列NV2101刷机保姆级教程,轻松解锁第三方应用!(内含详细教程、刷机工具和救砖等工具)

分享一份小度在家1C系列NV2101刷机保姆级教程,轻松解锁第三方应用!(内含详细教程、刷机工具和救砖等工具)

XiaoqiangClub的博客 7180

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

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

张毅的博客 264

精雕软件(JDpaint) 5.5 绿色版

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

剑指Offer——判断平衡二叉树

最直接做法 最直接的做法就是根据平衡二叉树的定义和特点来判断,1)一棵平衡二叉树的左右子树都是平衡二叉树;2)平衡二叉树的左右子树的高度差不超过1。 class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { if(TreeDepth(pRoot)<=2) retur...

newbiee的博客 226

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

剑指 offer代码解析——面试题39判断平衡二叉树

题目:输入一颗二叉树的根结点,判断该树是不是平衡二叉树。 如果某二叉树中任意结点的左右子树的高度相差不超过1,那么它就是一棵平衡二叉树。 分析:所谓平衡二叉树就是要确保每个结点的左子树与右子树的高度差在-1到1之间。 由于之前一题已经给出了二叉树高度的计算方法,因此本题最直观的思路就是分别计算每个结点的左子树高和右子树高,从而判断一棵树的所有结点是否均为平衡二

大闲人柴毛毛 1895

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

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

剑指Offer之判断平衡二叉树

题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 参考代码: public boolean IsBalanced_Solution(TreeNode root) { if(root == null)return true; return judge(root) != -1; } public int judge(TreeNode root){ if(root == null)return 0; int

空调不够冷 155

剑指offer-平衡二叉树的判断

题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 。 思路: 平衡二叉树的定义是:所谓的平衡之意,就是树中任意一个结点下左右两个子树的高度差不超过 1。 解题思路有两种,只遍历一次的方法最优。 1、重复遍历多次:在遍历树的每个结点的时候,调用函数TreeDepth得到它的左右子树的深度。如果每个结点的左右子树的深度相差都不超过1,则这是一颗平衡的二叉树。这种方法的缺点是,首先判断根结点是不是平衡的,需要使用TreeDepth获得左右子树的

weixin_42048754的博客 163

剑指offer之判断二叉树是不是平衡二叉树

1 问题 判断二叉树是不是平衡二叉树 平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树 2 代码实现 int getTreeHeigh(Node *haed) { ...

码莎拉蒂 2399

剑指offer——树:判断是不是平衡二叉树

该代码实现了平衡二叉树的判断功能。平衡二叉树要求任意节点的左右子树高度差不超过1,同时左右子树本身也必须是平衡的。算法通过递归方式实现:deep函数计算子树深度,IsBalanced_Solution函数先检查当前节点左右子树高度差是否在1以内,再递归检查左右子树是否平衡。该方法时间复杂度为O(n^2),空间复杂度为O(n)(递归栈空间)。判断过程中既考虑了局部平衡性(当前节点),也保证了整体平衡性(所有子树)。

weixin_74681777的博客 132

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

平衡二叉树的定义 若左右子树深度差不超过1则为一颗平衡二叉树 实现代码 class TreeNode(): def __init__(self,x): self.val = x self.left = None self.right = None class Solution: def getDeepth(self,Root): ...

欢迎关注【微信公众号】测试开发Guide,从功能测试进阶测试开发 260

剑指offer_39:判断平衡二叉树

关于这一道题我没想到还蛮难的 思路就是双递归去完成 第一个解决高度差,左右子树的高度差如何求解?对这就是求一个树的深度,一个树的深度怎么求? 遍历呀,怎么遍历,随便一个遍历算法就行啊,用递归求啊! public int IsBalanced_Solution_1(TreeNode root) { if(root==null) { return 0; ...

王文强的博客 443

剑指Offer:平衡二叉树的判断

题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 *************************************************************************************************************************************************** 知识点复习(求二叉树的深度) 求二叉树...

qq_28632639的博客 200

剑指Offer:55 二叉树的深度/判断平衡二叉树

平衡二叉树,就是左子树深度和右子树深度差最多为1,沿用上一题38题的判断树的深度的代码,就可以AC 但是其实代码是错误的,因为:只是判断了根节点的左右子树深度差,而平衡二叉树要求任意节点的左右子树高度差不超过1 class Solution { public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot=...

chengda321的专栏 231

[剑指offer]-判断树是否为平衡二叉树

输入一棵二叉树,判断该二叉树是否是平衡二叉树。 平衡二叉树性质: 是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 思路: 方法一(不合适,需要重复遍历节点多次,耗时长O(n^2))) bool isBalanced(TreeNode* pRoot){ if(pRoot == NULL) return true; int left =...

yuemingyang7010的博客 437

【剑指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】二叉树深度
兰亭风雨
博客等级 码龄16年 8555粉丝 217原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值