当前位置: 首页 > news >正文 网站百度收录idc销售网站模板 news 2025/10/21 10:29:35 网站百度收录,idc销售网站模板,微友圈推广平台怎么加入,网站备案app题目#xff1a; 实现一个函数#xff0c;检查二叉树是否平衡。在这个问题中#xff0c;平衡树的定义如下#xff1a;任意一个节点#xff0c;其两棵子树的高度差不超过 1。 一、平衡树定义#xff1a; 二叉树#xff0c;一种由节点组成的树形数据结构#xff0c;每…题目 实现一个函数检查二叉树是否平衡。在这个问题中平衡树的定义如下任意一个节点其两棵子树的高度差不超过 1。 一、平衡树定义 二叉树一种由节点组成的树形数据结构每个节点最多有两个子节点分别称作左子节点和右子节点。而平衡二叉树可不是普通的二叉树它有着严苛的要求对于树中的任意一个节点其两棵子树左子树和右子树的高度差不能超过 1。这个定义看似简单实则暗藏玄机它关乎二叉树的查找效率、稳定性等诸多性能指标。想象一下如果一棵二叉树极度不平衡就如同瘸腿走路某些操作的耗时会大幅增加效率大打折扣。 举个例子在一棵平衡二叉搜索树里查找一个元素的时间复杂度接近O()。可要是树失衡了最坏情况下查找时间复杂度能退化成O这差距可就太悬殊了。 二、解题思路拆解 整体思路概述 拿到这道题要判断一棵二叉树是否平衡关键在于检查树中每个节点的左右子树高度差是否都不超过 1。所以整体思路是通过遍历二叉树的每个节点去获取并比较其左右子树的高度进而得出整棵树是否平衡的结论通常会采用递归的方式来实现这个过程。 一计算子树高度 咱们得先打造一个 “高度测量仪”也就是一个专门计算以某个节点为根节点的子树高度的函数。递归在这里大展拳脚其逻辑简洁而巧妙当节点为空时好比遇到了树的 “尽头”高度自然是 0要是节点非空那这棵子树的高度就得看它左右 “臂膀”左右子树谁更长了取两者高度最大值再给它加上 1把当前节点这一层算上。以下是用 C 语言展示的代码片段 //计算树的高度的辅助函数 int treeHeight(struct TreeNode* node) {if (node NULL) {return 0;}int leftHeight treeHeight(node-left);int rightHeight treeHeight(node-right);return (leftHeight rightHeight? leftHeight : rightHeight) 1; } 在这段代码里先是递归地深挖 node 的左子树高度存进 leftHeight再探寻右子树高度存入 rightHeight最后掐指一算挑出大值加 1 返回完美算出子树高度。 二判断节点平衡性与整树遍历 有了测量子树高度的 “神器”下一步就是打造主函数来宣判二叉树的 “平衡命运” 了。首先要照顾到特殊情况要是根节点就是空的那没得说这棵树妥妥是平衡的直接返回 true皆大欢喜。 碰上根节点非空时就得严肃起来了。先用刚才的函数量出根节点左右子树各自的高度要是这俩高度差的绝对值大于 1那这棵树在根节点这儿就 “崴脚” 了立马返回 false宣判它不平衡。 但事情还没完即便当前根节点这关过了它的子树里说不定还有 “定时炸弹” 不平衡的节点呢。所以得接着递归调用主函数分别去审查左子树和右子树是否平衡只有左右子树都稳稳当当、符合平衡标准这整棵树才算得上是平衡的故而最终返回对左右子树递归判断结果的逻辑与。用代码说话 bool isBalanced(struct TreeNode* root) {if (root NULL) {return true;}int leftHeight treeHeight(root-left);int rightHeight treeHeight(root-right);if (abs(leftHeight - rightHeight) 1) {return false;}return isBalanced(root-left) isBalanced(root-right); } 三、代码实现 #include stdio.h #include stdlib.h #include stdbool.h//定义树的结构体 struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right; };// 构建二叉树节点的函数辅助函数方便创建测试用的二叉树 struct TreeNode* createNode(int val) {struct TreeNode* newNode (struct TreeNode*)malloc(sizeof(struct TreeNode));newNode-val val;newNode-left NULL;newNode-right NULL;return newNode; }// 计算树的高度的辅助函数 int treeHeight(struct TreeNode* node) {if (node NULL) {return 0;}// 递归计算左子树高度int leftHeight treeHeight(node-left);// 递归计算右子树高度int rightHeight treeHeight(node-right);// 取左右子树中较大的高度加1根节点算一层作为当前节点所在子树的高度return (leftHeight rightHeight? leftHeight : rightHeight) 1; }bool isBalanced (struct TreeNode* root) {if (rootNULL){return true;}// 计算左子树高度int leftHeight treeHeight(root-left);// 计算右子树高度int rightHeight treeHeight(root-right);// 判断当前节点的左右子树高度差是否超过1若超过则不平衡if (abs(leftHeight - rightHeight) 1) {return false;}// 递归地判断左子树和右子树是否平衡return isBalanced(root-left) isBalanced(root-right); };int main(){ //构建一个二叉树struct TreeNode* root createNode(3);root-left createNode(9);root-right createNode(20);root-right-leftcreateNode(15);root-right-rightcreateNode(7);bool result isBalanced(root);if (result) {printf(该二叉树是平衡二叉树\n);} else {printf(该二叉树不是平衡二叉树\n);}return 0; } 四、代码实现细节与优化点 上面给出的代码是基于 C 语言结构体实现二叉树节点的经典范例。代码结构清晰两个函数各司其职一个专心算高度一个全力判断平衡。 不过呢这代码还有优化空间。现在计算子树高度和判断平衡的过程中存在重复计算每次判断一个节点的平衡性都要重新完整计算左右子树高度当树规模大时计算量冗余严重。优化思路是把高度计算与平衡判断合二为一一边计算高度一边检查平衡性一旦发现不平衡就及时止损不再做无用功。这种改进能大幅削减不必要的计算提升算法效率。 五、改进代码实现 #include stdio.h #include stdlib.h #include stdbool.h// 定义二叉树节点结构体 struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right; };// 构建二叉树节点的函数辅助函数方便创建测试用的二叉树 struct TreeNode* createNode(int val) {struct TreeNode* newNode (struct TreeNode*)malloc(sizeof(struct TreeNode));newNode-val val;newNode-left NULL;newNode-right NULL;return newNode; }// 优化后的函数同时计算高度并判断是否平衡返回值大于等于0表示当前子树的高度返回 -1表示子树不平衡 int isBalancedAndHeight(struct TreeNode* node) {if (node NULL) {return 0;}// 递归计算左子树高度并判断平衡性int leftHeight isBalancedAndHeight(node-left);if (leftHeight -1) {return -1;}// 递归计算右子树高度并判断平衡性int rightHeight isBalancedAndHeight(node-right);if (rightHeight -1) {return -1;}// 检查当前节点的左右子树高度差是否超过1if (abs(leftHeight - rightHeight) 1) {return -1;}// 返回当前子树高度左右子树中较大高度 1return (leftHeight rightHeight? leftHeight : rightHeight) 1; }// 判断二叉树是否平衡的主函数调用优化后的辅助函数进行判断 bool isBalanced(struct TreeNode* root) {return isBalancedAndHeight(root)! -1; }int main() {// 构建一个简单的二叉树示例这里你可以自行修改节点值和结构来测试不同情况struct TreeNode* root createNode(3);root-left createNode(9);root-right createNode(20);root-right-leftcreateNode(15);root-right-rightcreateNode(7);bool result isBalanced(root);if (result) {printf(该二叉树是平衡二叉树\n);} else {printf(该二叉树不是平衡二叉树\n);}return 0; } 总结与拓展 判断二叉树是否平衡不仅是一道算法面试高频题更是深入理解二叉树特性的绝佳契机。通过递归手段巧妙遍历、精准测量、严谨比对我们能稳稳拿捏二叉树的平衡状况。往后再遇到二叉树相关复杂操作像是构建平衡二叉搜索树、优化树的存储与查找等这判断平衡的技巧都能派上大用场。 掌握了二叉树平衡判断就像是拿到了二叉树世界的一把钥匙诸多神秘大门将徐徐向你敞开。不管是继续刷题深造还是实际项目里优化数据结构都能底气十足、游刃有余。要是你对这篇博客内容有啥疑问、想法或是独到见解欢迎随时留言交流咱们一起在算法海洋破浪前行 文章转载自: http://www.morning.bncrx.cn.gov.cn.bncrx.cn http://www.morning.jqsyp.cn.gov.cn.jqsyp.cn http://www.morning.mhfbf.cn.gov.cn.mhfbf.cn http://www.morning.jbpodhb.cn.gov.cn.jbpodhb.cn http://www.morning.rfrx.cn.gov.cn.rfrx.cn http://www.morning.wpqwk.cn.gov.cn.wpqwk.cn http://www.morning.tndxg.cn.gov.cn.tndxg.cn http://www.morning.hcbky.cn.gov.cn.hcbky.cn http://www.morning.grtwn.cn.gov.cn.grtwn.cn http://www.morning.cmhkt.cn.gov.cn.cmhkt.cn http://www.morning.ytrbq.cn.gov.cn.ytrbq.cn http://www.morning.webpapua.com.gov.cn.webpapua.com http://www.morning.mnmrx.cn.gov.cn.mnmrx.cn http://www.morning.nbpqx.cn.gov.cn.nbpqx.cn http://www.morning.klltg.cn.gov.cn.klltg.cn http://www.morning.qttft.cn.gov.cn.qttft.cn http://www.morning.egmux.cn.gov.cn.egmux.cn http://www.morning.kwqqs.cn.gov.cn.kwqqs.cn http://www.morning.pbsqr.cn.gov.cn.pbsqr.cn http://www.morning.lphtm.cn.gov.cn.lphtm.cn http://www.morning.pjtw.cn.gov.cn.pjtw.cn http://www.morning.bfrff.cn.gov.cn.bfrff.cn http://www.morning.kstlm.cn.gov.cn.kstlm.cn http://www.morning.jxscp.cn.gov.cn.jxscp.cn http://www.morning.mcfjq.cn.gov.cn.mcfjq.cn http://www.morning.w58hje.cn.gov.cn.w58hje.cn http://www.morning.npxcc.cn.gov.cn.npxcc.cn http://www.morning.fwkpp.cn.gov.cn.fwkpp.cn http://www.morning.zybdj.cn.gov.cn.zybdj.cn http://www.morning.rdymd.cn.gov.cn.rdymd.cn http://www.morning.pznnt.cn.gov.cn.pznnt.cn http://www.morning.lgnz.cn.gov.cn.lgnz.cn http://www.morning.ybqlb.cn.gov.cn.ybqlb.cn http://www.morning.tthmg.cn.gov.cn.tthmg.cn http://www.morning.kabaifu.com.gov.cn.kabaifu.com http://www.morning.wkknm.cn.gov.cn.wkknm.cn http://www.morning.grxsc.cn.gov.cn.grxsc.cn http://www.morning.drswd.cn.gov.cn.drswd.cn http://www.morning.skdrp.cn.gov.cn.skdrp.cn http://www.morning.gfqj.cn.gov.cn.gfqj.cn http://www.morning.ghfmd.cn.gov.cn.ghfmd.cn http://www.morning.jrhcp.cn.gov.cn.jrhcp.cn http://www.morning.nzmhk.cn.gov.cn.nzmhk.cn http://www.morning.qnsmk.cn.gov.cn.qnsmk.cn http://www.morning.zstry.cn.gov.cn.zstry.cn http://www.morning.fkcjs.cn.gov.cn.fkcjs.cn http://www.morning.lcbgf.cn.gov.cn.lcbgf.cn http://www.morning.fllx.cn.gov.cn.fllx.cn http://www.morning.qlhkx.cn.gov.cn.qlhkx.cn http://www.morning.nicetj.com.gov.cn.nicetj.com http://www.morning.qsyyp.cn.gov.cn.qsyyp.cn http://www.morning.nnrqg.cn.gov.cn.nnrqg.cn http://www.morning.zdkzj.cn.gov.cn.zdkzj.cn http://www.morning.sqgqh.cn.gov.cn.sqgqh.cn http://www.morning.qbfwb.cn.gov.cn.qbfwb.cn http://www.morning.rgyts.cn.gov.cn.rgyts.cn http://www.morning.lyjwb.cn.gov.cn.lyjwb.cn http://www.morning.trmpj.cn.gov.cn.trmpj.cn http://www.morning.mzpd.cn.gov.cn.mzpd.cn http://www.morning.srky.cn.gov.cn.srky.cn http://www.morning.tqpr.cn.gov.cn.tqpr.cn http://www.morning.rkzb.cn.gov.cn.rkzb.cn http://www.morning.qrdkk.cn.gov.cn.qrdkk.cn http://www.morning.c7627.cn.gov.cn.c7627.cn http://www.morning.bdgb.cn.gov.cn.bdgb.cn http://www.morning.hkswt.cn.gov.cn.hkswt.cn http://www.morning.qwwcf.cn.gov.cn.qwwcf.cn http://www.morning.youngbase.cn.gov.cn.youngbase.cn http://www.morning.ccpnz.cn.gov.cn.ccpnz.cn http://www.morning.bpzw.cn.gov.cn.bpzw.cn http://www.morning.btpzn.cn.gov.cn.btpzn.cn http://www.morning.kqrql.cn.gov.cn.kqrql.cn http://www.morning.mpnff.cn.gov.cn.mpnff.cn http://www.morning.bwttp.cn.gov.cn.bwttp.cn http://www.morning.rtlth.cn.gov.cn.rtlth.cn http://www.morning.lxlfr.cn.gov.cn.lxlfr.cn http://www.morning.bpmns.cn.gov.cn.bpmns.cn http://www.morning.mrfjr.cn.gov.cn.mrfjr.cn http://www.morning.wqmyh.cn.gov.cn.wqmyh.cn http://www.morning.wjlnz.cn.gov.cn.wjlnz.cn 查看全文 http://www.tj-hxxt.cn/news/236598.html 相关文章: 温州网站建设咨询做网站经常用的术语 眼镜网站怎么做竞价爱奇艺会员推广联盟 适合个人站长的网站有哪些友妙招链接怎么弄 南充建网站王也道长高清头像 微信 帮别人做网站维护违法建设银行手机官方网站下载安装 杭州做购物网站网站建设yu 网站的收费标准太原seo关键词排名优化 辅助色网站免费模型网站 企业网站源码搜一品资源销售网站排名 网站排名公司哪家好百度域名排行 招聘网站官网wordpress 3.3.1 漏洞 四川建设厅网站怎么进不去电商平台需要什么资质 有没有做废品的网站wordpress自定义注册 手机建站关键词的优化方案 国际互联网网站工商局网站如何做网登 互联网创业项目平台加盟手机端网站如何优化 外贸建站 智能营销什么网站可以做论文 php网站系统微网站 合同 厦门公司网站制作流程用齐博cms建网站 莱芜房产网站学生网站做兼职 网站公司排行榜前十名wordpress 插件模板 学校网站 建设网站空间空间租赁 做靓号网站网站建设和优化 东莞营销网站建设公司网页设计分为几个部分 中国空间站最新视频seo系统源码出售 wordpress网站嵌入商城城市房产网 手机网站建设图片专业集团门户网站建设费用 网站建设完成后期维护如何将网站搭在阿里云 什么叫做响应式网站南宁小程序制作 英文站网站源码wordpress仿逛