博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程算法 - 推断二叉树是不是平衡树 代码(C)
阅读量:4310 次
发布时间:2019-06-06

本文共 1935 字,大约阅读时间需要 6 分钟。

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

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

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

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

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

代码:

/* * main.cpp * *  Created on: 2014.6.12 *      Author: Spike *//*eclipse cdt, gcc 4.8.1*/#include 
#include
#include
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

转载于:https://www.cnblogs.com/brucemengbm/p/7281642.html

你可能感兴趣的文章
探讨和比较Java和_NET的序列化_Serialization_框架
查看>>
1、jQuery概述
查看>>
数组比较大小的几种方法及math是方法
查看>>
FTP站点建立 普通电脑版&&服务器版
查看>>
js 给一段代码,给出运行后的最终结果的一些综合情况、
查看>>
webservice 详解
查看>>
js自动补全实例
查看>>
VS无法启动调试:“生成下面的模块时,启用了优化或没有调试信息“
查看>>
npm 安装 sass=-=-=
查看>>
WINFORM中加入WPF控件并绑定数据源实现跨线程自动更新
查看>>
C#类对象的事件定义
查看>>
各类程序员学习路线图
查看>>
HDU 5510 Bazinga KMP
查看>>
关于select @@IDENTITY的初识
查看>>
ASP.NET MVC ajax提交 防止CSRF攻击
查看>>
关于CSS伪类选择器
查看>>
适用于带文字 和图片的垂直居中方法
查看>>
Part 2 - Fundamentals(4-10)
查看>>
使用Postmark测试后端存储性能
查看>>
NSTextView 文字链接的定制化
查看>>