【数据结构】中判断一棵树是否为平衡二叉树
来源:互联网 发布:php 对象类型 编辑:程序博客网 时间:2024/05/19 03:18
平衡二叉树:就是指这棵二叉树的左子树和右子树之间的差值不大于1。
先定义一个二叉树的结构体:
struct TreeNode{TreeNode* _left;TreeNode* _right;};
在判断一颗二叉树是否为平衡二叉树的时候:
第一种方法是,先计算出这棵二叉树的高度。
计算高度的时候使用递归的方法,递归到左子树和右子树。
int TreeDepth(TreeNode* _root)//使用递归方法求出二叉树的高度{if (_root == NULL){return 0;}int left = TreeDepth(_root->_left);int right = TreeDepth(_root->_right);return (left > right) ? (left + 1) : (right + 1);}再使用判断平衡的函数,计算如果左子树和右子树的差值小于1就是平衡二叉树。
bool IsBalanceTree(TreeNode* _root){if (_root == NULL)//空树也是平衡二叉树{return true;}int left = TreeDepth(_root->_left);//int right = TreeDepth(_root->_right);if ((left - right) > 1 || (left - right) < -1)//平衡二叉树的判断条件,左子树与右子树的高度差不大于1{//如果高度差的绝对值大于1,返回错误return false;}else{return IsBalanceTree(_root->_left) && IsBalanceTree(_root->_right);}}但是这种方法需要遍历两遍,时间复杂度较高。
下面使用第二种方法,只需要遍历一遍,可以将高度和是否为平衡二叉树判断出来。
bool IsBalanceTree(TreeNode* _root, int &Depth){if (_root == NULL){Depth = 0;return true;}int left, right;if (IsBalanceTree(_root->_left, left) && IsBalanceTree(_root->_right, right)){int diff = left - right;//定义一个数值等于左边减去右边if (diff < 1 && diff >= -1){Depth = 1 + (left>right ? left : right);return true;}}return false;}
阅读全文
0 0
- 【数据结构】中判断一棵树是否为平衡二叉树
- 判断一棵树是否为平衡二叉树
- 判断一棵树是否为平衡二叉树
- 判断一棵树是否为平衡二叉树
- java数据结构-二叉树-判断一颗二叉树是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断二差树是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断是否为平衡二叉树
- Apache日志文件大小管理设置分析方法
- java基础(二):面向对象
- 1028. List Sorting (25)
- 为什么数据库连接很消耗资源
- 斯坦福大学公开课机器学习课程(Andrew Ng)六朴素贝叶斯算法
- 【数据结构】中判断一棵树是否为平衡二叉树
- 剑指offer面试题[60]-将二叉树打印成多行
- java小程序(万年历)
- Struts-2.0标签,关于ajax标签那些事儿.....
- 战胜拖延症
- 四.web形式的Gradle的java项目
- HDU-4280 Island Transport
- PostScript格式: 路径Path
- LintCode 解题记录 Matrix专题