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

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

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

    }

}

    原文作者:递归算法
    原文地址: https://blog.csdn.net/HGC2016/article/details/78077364
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞