JZ39-平衡二叉树
题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树。
解题思路:为了防止重复计算树的深度,我这里选用从叶子节点依次向上判断,当前节点左右节点符合条件则返回深度值,不符合条件返回-1;
/**
* @author 枫叶火火
*/
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null){
return true;
}
return IsBalanced(root) != -1;
}
//从下往上计算左右子树是否符合条件,不符合条件返回-1,符合返回当前最大深度值
private int IsBalanced(TreeNode node){
if(node == null){
return 0;
}
//左子树深度判断
int left = IsBalanced(node.left);
if(left == -1){
return -1;
}
//右子树深度判断
int right = IsBalanced(node.right);
if(right == -1){
return -1;
}
//判断当前左右子树是否符合条件
if(Math.abs(left - right) > 1){
return -1;
}
//返回当前最大深度
return Math.max(left, right)+1;
}
}