- 题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- 思路
由题意可知,左右子树的高度差的绝对值小于等于1
1.从下向上遍历(剪枝)
2.如果左子树不平衡,那么整棵树不平衡
3.如果右子树不平衡,那么整棵树不平衡
4.如果左右子树高度差的绝对值>1,那么整棵树不平衡
- 代码
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
int ans=getDepth(root);
return ans!=-1 ? true : false;
}
/*判断深度
由题意可知,左右子树的高度差的绝对值小于等于1
1.从下向上遍历(剪枝)
2.如果左子树不平衡,那么整棵树不平衡
3.如果右子树不平衡,那么整棵树不平衡
4.如果左右子树高度差的绝对值>1,那么整棵树不平衡
*/
private int getDepth(TreeNode root){
//根节点为空,深度为0
if(root == null)
return 0;
//递归,一直到最后一个右节点,相当于从底向上遍历
int left=getDepth(root.left);
//剪枝条件
if(left == -1)
return -1;
int right=getDepth(root.right);
if(right == -1)
return -1;
return Math.abs(left-right) > 1 ? -1 : 1 + Math.max(left,right);
}
}