输入一棵二叉树,判断该二叉树是否是平衡二叉树?
解答: 1、算法如图,该算法运行时间15ms,空间耗用 8000k+
2、递归算法在帮我们解决实际问题的过程中,思路是非常清晰的,如此题的解法
1)、递归判断二叉树的左子树和右子树是否都为平衡二叉树,若非,立马返回false,有效节省时间;
2)、在条件一下,再行计算左子树与右子树的高度,同样递归计算,如果高度差小于2,返回true,反之返回false;
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null){
return true;
}
if(root.left==null && root.right==null){
return true;
}
if(IsBalanced_Solution(root.left) || IsBalanced_Solution(root.right)){
return false;
}
int leftHeight = calculateHeight(root.left);
int rightHeight = calculateHeight(root.right);
if(Math.abs(leftHeight – rightHeight)<2){
return true;
}
return false;
}
public int calculateHeight(TreeNode root){
if(root == null){
return 0;
}
return Math.max(calculateHeight(root.left),calculateHeight(root.right));
}
}