输入一棵二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
若向下遍历,则需要将所有结点遍历,而若向上遍历,则只需要遍历到不平衡的结点即可退出遍历。
public class Solution {
boolean isBalanced = true;
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null)return true;
IsBalanced(root);//递归遍历
return isBalanced;
}
public int IsBalanced(TreeNode x)
{
if(x == null)return 0;
if(isBalanced != false)//若结点不平衡则直接跳出,无需继续遍历。
{
int right = IsBalanced(x.left);//递归获取右子树深度
int left = IsBalanced(x.right);//递归获取左子树深度
if(Math.abs(left-right)>1)//若左右子树相差超过1,则不平衡
{
isBalanced = false;
}
return right>left?right+1:left+1;//若右子树大于左子树,则返回right+1表示右子树比左子树多一层。
}
return 0;
}
}