判断二叉树是否是平衡二叉树(LeetCode--110平衡二叉树)
题目
判断一棵二叉树是否是平衡二叉树。(平衡二叉树每个节点的左右两个子树的高度差的绝对值不超过1。)
解题方法
- 从根节点开始,首先判断其左右子树高度差的绝对值是否小于等于1,否则直接判定不是平衡二叉树;
- 当step1中左右子树高度差的绝对值小于等于1时,分别判断左右孩子节点是否满足平衡条件;
- 同样左右孩子判断他们的左右子树高度差,然后再继续判断他们的左右孩子节点,依次递归。
代码
public boolean isBalanced(TreeNode root) {
if(root == null){//空树为平衡树
return true;
}
int lh = treeHeight(root.left);
//左子树高
int rh = treeHeight(root.right);
//右子树高
if(Math.abs(lh - rh) > 1){//如果左右子树高度差绝对值超过1,则不平衡
return false;
}
//递归判断节点的左右孩子节点是否满足平衡条件
return isBalanced(root.left) && isBalanced(root.right);
}//二叉树树高
private int treeHeight(TreeNode root){
if(null == root){//空节点高为0
return 0;
}
int leftHeight = treeHeight(root.left);
//左子树树高
int rightHeight = treeHeight(root.right);
//右子树树高
//当前节点高为左右子树高度最大值加1
return leftHeight >= rightHeight ? (leftHeight + 1) : (rightHeight + 1);
}
推荐阅读
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- java中如何实现重建二叉树
- 种树郭橐驼传(文言句式+古今异义+词类活用+通假字)
- 白杨树
- 08黑龙江迟淑荣弯柳树网络学院第五期学习赵宗瑞老师主讲的(传统文化与身心健康)教育体系心得体会
- [原创]能见沂山一棵树,胜读十年无用书!
- 涵养字外功
- 2018.07.07《刺杀骑士团长》村上春树
- 二叉树路径节点关键值和等于目标值(LeetCode--112&LeetCode--113)
- C语言解方程的根和判断是否是闰年