版权声明:本文为博主原创文章。未经博主同意不得转载。

https://blog.csdn.net/mmc_maodun/article/details/27242575

转载请注明出处:http://blog.csdn.net/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】推断二叉树平衡的更多相关文章

  1. 《剑指offer》 二叉树的镜像

    本题来自<剑指offer>二叉树的镜像 题目: 操作给定的二叉树,将其变换为源二叉树的镜像. 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 ...

  2. 剑指Offer:二叉树打印成多行【23】

    剑指Offer:二叉树打印成多行[23] 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题目分析 Java题解 package tree; import java.uti ...

  3. 剑指Offer:二叉树中和为某一值的路径【34】

    剑指Offer:二叉树中和为某一值的路径[34] 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. ...

  4. 剑指 Offer 34. 二叉树中和为某一值的路径 + 记录所有路径

    剑指 Offer 34. 二叉树中和为某一值的路径 Offer_34 题目详情 题解分析 本题是二叉树相关的题目,但是又和路径记录相关. 在记录路径时,可以使用一个栈来存储一条符合的路径,在回溯时将进 ...

  5. 剑指 Offer 34. 二叉树中和为某一值的路径

    剑指 Offer 34. 二叉树中和为某一值的路径 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 示例: 给定如下 ...

  6. 力扣 - 剑指 Offer 27. 二叉树的镜像

    题目 剑指 Offer 27. 二叉树的镜像 思路1(递归) 我们可以使用深度优先搜索,先递归到链表的末尾,然后从末尾开始两两交换.就相当于后续遍历而已 记得要先保存下来node.right节点,因为 ...

  7. 【剑指Offer】二叉树的镜像 解题报告(Python)

    [剑指Offer]二叉树的镜像 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...

  8. 【剑指Offer】二叉树中和为某一值的路径 解题报告(Python)

    [剑指Offer]二叉树中和为某一值的路径 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervi ...

  9. 【剑指Offer】二叉树的下一个结点 解题报告(Python)

    [剑指Offer]二叉树的下一个结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  10. 【剑指offer】二叉树中和为某一值的路径

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26141815 题目描写叙述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数 ...

随机推荐

  1. 解决使用elementUI框架el-upload上传组件时session丢失问题

    在使用elementui框架上传组件的时候,出现session丢失,后端无法获取到sessionid,导致返回状态为未登陆 查看请求头缺少cookie值 上传组件代码: <el-upload c ...

  2. 无法从其“Checked”属性的字符串表示形式“checked”创建“System.Boolean”类型

    如果你要在后台进行设置的话...在<input type="radio" id="dd" name="dd" runat=" ...

  3. getWidth()和getMeasuredWidth()的区别

    结论:getMeasuredWidth()获取的是view原始的大小,也就是这个view在XML文件中配置或者是代码中设置的大小.getWidth()获取的是这个view最终显示的大小,这个大小有可能 ...

  4. 基于Jmeter和Testlink的自动化测试框架研究与实施

    关于测试框架搭建的详细过程,会在另一篇文章中详细介绍:http://www.cnblogs.com/leeboke/p/6145977.html 摘 要 目前基于Jmeter的接口自动化测试框架,大多 ...

  5. HDFS Sink使用技巧

    1.文件滚动策略 在HDFS Sink的文件滚动就是文件生成,即关闭当前文件,创建新文件.它的滚动策略由以下几个属性控制: hdfs.rollInterval 基于时间间隔来进行文件滚动,默认是30, ...

  6. Expo大作战(四十一)【完】--expo sdk 之 Assets,BarCodeScanner,AppLoading

    Expo大作战系列完结! 简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与 ...

  7. SQL Server的一个不显眼的功能 备份文件的分割

    SQL Server的一个不显眼的功能 备份文件的分割 当完整备份数据库的时候,我们有时候可能会遇到一种极端情况,比如服务器上C,D,E三个盘符都只剩下5G空间了 但是如果要完整备份业务库需要12G的 ...

  8. vuejs组件库pk介绍

    vuejs可以说是近2年多以来最火的前端框架,随之而来就产生了非常多的组件库,我们来看看其中比较著名和人气旺盛的几个 1. Vuetify-符合material design设计理念, star数量7 ...

  9. 【HANA系列】SAP HANA XS的JavaScript API详解

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS的Java ...

  10. [cb]Unity 关卡编辑器 开发

    关卡编辑器 关卡编辑器插件开发日记 1. Apply to Prefab [替换Prefab] if (GUILayout.Button("Apply Collider To Prefab& ...