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

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. JavaWeb学习(二十二)———EL表达式

    一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...

  2. Java基础之 运算符

    前言:Java内功心法之运算符,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,J ...

  3. set get del

    //设置 $ob = new Redis(); $ob->connect('127.0.0.1', 6379); $re = $ob->set('str1', serialize(['a' ...

  4. jQuery validate and groups - how to avoid errorPlacement usage?

    本文参照:https://stackoverflow.com/questions/14146893/using-groups-with-jquery-form-validation-how 指定错误提 ...

  5. Maven配置国内镜像仓库

    eclipse 位置

  6. .NET JSON 转换 Error ” Self referencing loop detected for type“

    在进行实体转换为Json格式报错如下图: Self referencing loop detected for property 'md_agent' with type 'System.Data.E ...

  7. IEnumerable、ICollection、IList、List之间的区别与方法介绍

    区别 以下列出IEnumerable.ICollection.IList.List继承关系.(这里带有泛型,非泛型也是一样的关系) IEnumerable<T>: public inter ...

  8. [android] 手机卫士欢迎细节和主界面

    splash界面的细节 ctrl + O 搜索 在去标题的时候,对话框主题被去掉了,有点丑,现在既要有新版本的对话框又不显示标题 把清单文件中activity节点的主题去掉 进入到applicatio ...

  9. CSS学习笔记09 简单理解BFC

    引子 在讲BFC之前,先来看看一个例子 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  10. Tests of the Equality of Two Means

    Introduction In this lesson, we'll continue our investigation of hypothesis testing. In this case, w ...