Leetcode110.平衡二叉树
题目描述
/**
* 给定一个二叉树,判断它是否是高度平衡的二叉树。
*
* 本题中,一棵高度平衡二叉树定义为:
*
* 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
*/
思路分析
- 高度平衡的二叉树,即平衡二叉树,平衡二叉树的左右子树的高度值相差小于1
- 判断一棵树是否为平衡二叉树,除了判断左右子树的高度值满足条件,还有判断其左右子树是否也为平衡二叉树
- 求二叉树的高度,可以使用递归的思路,根节点的高度等于左右子树的高度值最大值 + 1
- 详解见下
源码及分析
/**
*
* @param root 根节点
* @return
*/
public boolean isBalanced(TreeNode root) {
if (root == null){
return true;
}else {
//判断一棵树是否是平衡二叉树
//1.左右子树的高度值差小于1
//2.左子树平衡
//3.右子树也平衡
return Math.abs(height(root.left) - height(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right);
}
}
//编写方法计算二叉树的高度
public int height(TreeNode root){
if (root == null){
return 0;
}else {
//当前节点的左右子树高度值的较大值 + 1
return Math.max(height(root.left),height(root.right)) + 1;
}
}