推断二叉树是不平衡树 代码(C)

本文地址: http://blog.csdn.net/caroline_wendy

题目: 输入一颗二叉树的根结点, 推断该树是不是平衡二叉树.

二叉平衡树: 随意结点的左右子树的深度相差不超过1.

使用后序遍历的方式, 而且保存左右子树的深度, 进行比較.

代码:

/*
* main.cpp
*
* Created on: 2014.6.12
* Author: Spike
*/ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h>
#include <stdlib.h>
#include <string.h> struct BinaryTreeNode {
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
}; bool IsBalanced(BinaryTreeNode* pRoot, int* pDepth) {
if (pRoot == NULL) {
*pDepth = 0;
return true;
}
int left, right;
if (IsBalanced(pRoot->m_pLeft, &left) && IsBalanced(pRoot->m_pRight, &right)) {
int diff = left - right;
if (diff>=-1 && diff<=1) {
*pDepth = 1 + (left>right?left:right);
return true;
}
}
return false;
} bool IsBalanced(BinaryTreeNode* pRoot) {
int depth = 0;
return IsBalanced(pRoot, &depth);
} BinaryTreeNode* init(void) {
BinaryTreeNode* pRoot = new BinaryTreeNode(); pRoot->m_nValue = 1;
BinaryTreeNode* pNode2 = new BinaryTreeNode(); pNode2->m_nValue = 2;
BinaryTreeNode* pNode3 = new BinaryTreeNode(); pNode3->m_nValue = 3;
BinaryTreeNode* pNode4 = new BinaryTreeNode(); pNode4->m_nValue = 4;
BinaryTreeNode* pNode5 = new BinaryTreeNode(); pNode5->m_nValue = 5;
BinaryTreeNode* pNode6 = new BinaryTreeNode(); pNode6->m_nValue = 6;
BinaryTreeNode* pNode7 = new BinaryTreeNode(); pNode7->m_nValue = 7;
pRoot->m_pLeft = pNode2; pRoot->m_pRight = pNode3;
pNode2->m_pLeft = pNode4; pNode2->m_pRight = pNode5;
pNode4->m_pLeft = NULL; pNode4->m_pRight = NULL;
pNode5->m_pLeft = pNode7; pNode5->m_pRight = NULL;
pNode7->m_pLeft = NULL; pNode7->m_pRight = NULL;
pNode3->m_pLeft = NULL; pNode3->m_pRight = pNode6;
pNode6->m_pLeft = NULL; pNode6->m_pRight = NULL;
return pRoot;
} int main(void)
{
BinaryTreeNode* pRoot = init();
bool result = IsBalanced(pRoot);
printf("result = %s\n", result==false?"false":"true");
return 0;
}

输出:

result = true

编程算法 - 推断二叉树是不是平衡树 代码(C)的更多相关文章

  1. 编程算法 - 篱笆修理(Fence Repair) 代码(C)

    篱笆修理(Fence Repair) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 把一块木板切成N块, 每次切两块, 分割的开销是木板长度, ...

  2. 编程算法 - 不用加减乘除做加法 代码(C)

    不用加减乘除做加法 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 写一个函数, 求两个整数之和, 要求在函数体内不得使用+, -, *, /四 ...

  3. 编程算法 - 食物链 并查集 代码(C)

    食物链 并查集 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 有N仅仅动物, 分别编号为1,2,...,N. 全部动物都属于A,B,C中的一种 ...

  4. 编程算法 - 最小的k个数 代码(C)

    最小的k个数 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入n个整数, 找出当中的最小k个数. 使用高速排序(Quick Sort)的方法 ...

  5. 编程算法 - 把字符串转换为整数 代码(C)

    把字符串转换为整数 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 写一个函数StrToInt, 模拟atoi的功能, 把字符串转换为整数. 须 ...

  6. 编程算法 - 水洼的数量 代码(C)

    水洼的数量 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 有一个大小为N*M的园子, 雨后起了积水. 八连通的积水被觉得是连接在一起的. 请求 ...

  7. 编程算法 - 背包问题(三种动态规划) 代码(C)

    背包问题(三种动态规划) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目參考: http://blog.csdn.net/caroline_wen ...

  8. 编程算法 - 二叉树的深度 代码(C)

    二叉树的深度 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一棵二叉树的根节点, 求该树的深度. 依次选择最深的左右子树, 然后递归加1. ...

  9. 游戏编程算法与技巧 Game Programming Algorithms and Techniques (Sanjay Madhav 著)

    http://gamealgorithms.net 第1章 游戏编程概述 (已看) 第2章 2D图形 (已看) 第3章 游戏中的线性代数 (已看) 第4章 3D图形 (已看) 第5章 游戏输入 (已看 ...

随机推荐

  1. React Native - 2 控件Flexbox

    *强烈建议使用Genymotion模拟器,比AVD速度快,功能强大.   1. flexDirection Flexbox是连续布局,它有主轴(primary axis)和交叉轴(cross axis ...

  2. unity制作简单血条

    学习Unity已经10天了,也没发现有什么长进,真的急.昨天仿着官方Demo做了个射击游戏轮廓,其中需要给每个怪做一个血条. 搜了一些,挺复杂的,用NGUI或者UGUI,外加很长的代码...不过还是找 ...

  3. HDU 6322.Problem D. Euler Function -欧拉函数水题(假的数论题 ̄▽ ̄) (2018 Multi-University Training Contest 3 1004)

    6322.Problem D. Euler Function 题意就是找欧拉函数为合数的第n个数是什么. 欧拉函数从1到50打个表,发现规律,然后勇敢的水一下就过了. 官方题解: 代码: //1004 ...

  4. dart Stream

  5. android studio中timber的配置

    在你项目的module级别的build.gradle中加入 compile 'com.jakewharton.timber:timber:3.1.0' 然后Timber的依赖就添加进来了.

  6. HDU 多校1.3

    Colorful Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  7. Linux命令之umount

    umount [-hV] umount -a [-dflnrv] [-t vfstype] [-O option] umount [-dflnrv] {dir|device} [-t vfstype] ...

  8. POJ 3293 Rectilinear polygon(几何基础)

    [题目链接] http://poj.org/problem?id=3293 [题目大意] 给出一些点,每个点只能向外引出一条平行X轴,和Y轴的边, 问能否构成一个闭多边形,如果能,返回多边形的总边长, ...

  9. 【博弈论】【SG函数】poj2311 Cutting Game

    由于异或运算满足结合律,我们把当前状态的SG函数定义为 它所能切割成的所有纸片对的两两异或和之外的最小非负整数. #include<cstdio> #include<set> ...

  10. xshell与虚拟机无法连接

    遇到xshell无法连接到虚拟机的情况,我大概总结为以下几种情况: 1.宿主机或虚拟机中的防火墙阻止了xshell的访问. 关闭宿主机和虚拟机中的防火墙,linux虚拟机中的防火墙关闭为 :servi ...