检查二叉树是否平衡
2015-08-21 22:21
351 查看
实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个结点,其两棵子树的高度差不超过1.
直接递归访问整棵树,计算每个结点两棵子树的高度。
public static int getHeight(TreeNode root)
{
if(root == null) return 0;//终止条件
return Math.max(getHeight(root.left), getHeight(root.right))+1;
}
public static boolean isBalanced(TreeNode root)
{
if(root == null) return true;//终止条件
int heightDiff=getHeight(root.left)-getHeight(root.right);
if(Math.abs(heightDiff)>1)
return false;
else//递归
{
return isBalanced(root.left) && isBalanced(root.right);
}
}
public static int checkHeight(TreeNode root )
{
if(root == null)
{
return 0;//高度为0
}
//检查左子树是否平衡
int leftHeight=checkHeight(root.left);
if(leftHeight==-1)
{
return -1;
}
//检查右子树是否平衡
int rightHeight=checkHeight(root.right);
if(rightHeight == -1)
{
return -1;
}
/*检查当前结点是否平衡*/
int heightDiff=leftHeight-rightHeight;
if(Math.abs(heightDiff)>1)
return -1;
else
{
//返回高度
return Math.max(leftHeight, rightHeight)+1;
}
}
public static boolean isBalanced(TreeNode root)
{
if(checkHeight(root)== -1)
{
return false;
}
else
{
return true;
}
}
这段代码需要O(N)的时间和O(H)的空间,H是树的高度。
相关文章推荐
- EntityFramework之DetectChanges's Secrets(三)(我为EF正名)
- 闭包作用
- 读博文有感
- js的DOM(节点属性)
- Centos 6.6 创建桌面图标
- The Doors 最短路 + 简单几何
- OC学习--<猜拳游戏> 之 通过面向对象思想实现 2.0版本
- 近期学习计划
- 将博客搬至CSDN
- hdu1532Drainage Ditches裸的网络流
- OC学习--<猜拳游戏> 之 通过面向对象思想实现 2.0版本
- leetcode3:Longest Substring Without Repeating Characters
- Classification and logistic regression
- windows下面常用的***测试命令
- Meteor.call Wrapper
- GDOI2016模拟8.21新Nim游戏
- C函数返回局部变量
- 【POJ 1845】 Sumdiv (整数唯分+约数和公式+二分等比数列前n项和+同余)
- CocoaPods详解之----使用篇
- WEB基础之:CSS