递归算法应用-牺牲空间换取时间

输入一棵二叉树,判断该二叉树是否是平衡二叉树?

解答: 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));  
    }
}

你可能感兴趣的:(递归算法应用-牺牲空间换取时间)