检查二叉树是否平衡
来源:互联网 发布:激光聚焦矩阵 mc百科 编辑:程序博客网 时间:2024/06/04 19:25
实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个结点,其两棵子树的高度差不超过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是树的高度。
- 检查二叉树是否平衡
- 【Java】检查二叉树是否平衡。
- 二叉树平衡检查
- 二叉树平衡检查
- 二叉树平衡检查
- 二叉树平衡检查
- 二叉树平衡检查
- 二叉树平衡检查
- 二叉树平衡检查
- 二叉树平衡检查
- 检查平衡二叉树
- 程序员面试经典--检查二叉树是否平衡
- 二叉树平衡检查(Java)
- 实现一颗二叉树,检查二叉树是否平衡(java实现)
- Chapter 4 | Trees and Graphs--检查一棵树是否平衡以及判断一棵树是否为平衡二叉树
- 判断平衡二叉树是否平衡
- 判断二叉树是否平衡
- 判断二叉树是否平衡
- POJ 2777 Count Color (线段树区间修改 + 状态压缩)
- BufferedReader子类LineNumberReader装饰类的简单介绍
- js的screen对象
- 设计模式之装饰模式
- c++程序设计课程--简单的设计任务
- 检查二叉树是否平衡
- 书宜杂读,业宜精钻
- java.util.zip.ZipException: error in opening zip file
- wordpress 用户控制插件
- 数组中只出现一次的数字
- Easy Ui Layout控件
- Try These 9 Tricks To Sleep Better At Night
- 20150821日报
- iOS7系统iLEX RAT冬青鼠安装教程:无需刷机还原纯净越狱系统