java递归时,如果参数是数组需要拆分时

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

给定的模版是:

public class Solution {

    public boolean VerifySquenceOfBST(int [] sequence) {
        
    }
}

思路很简单,所谓二叉搜索树即对根节点即其左右子树,其左子树的所有值都小于根,右子树的所有值都大于根。

那么在这个后序遍历的数组中从数组中最后一个元素根节点往前找,找到一个分界点,左边的部分都小于根,右边的部分都大于根。

并且左、右两边的部分都需要满足上述条件,这明显递归就可以。

但如果按给定的函数递归,参数是数组,还需要把数组拆分,再这道题中是麻烦的。我这样做的代码有70多行,但如果换个思路,用自己定义的函数,参数除了这个开始给定的数组,加上起始,结束点,即可实现数组分割了,给这俩参数不同值,就相当于数组的不同部分。

代码如下(别人写的):

链接:https://www.nowcoder.com/questionTerminal/a861533d45854474ac791d90e447bafd
来源:牛客网

public class Solution {
     public boolean VerifySquenceOfBST( int [] sequence) {
         if (sequence.length== 0 )
             return false ;
         if (sequence.length== 1 )
             return true ;
         return ju(sequence, 0 , sequence.length- 1 );
         
     }
     
     public boolean ju( int [] a, int star, int root){
         if (star>=root)
             return true ;
         int i = root;
         //从后面开始找
         while (i>star&&a[i- 1 ]>a[root])
             i--; //找到比根小的坐标
         //从前面开始找 star到i-1应该比根小
         for ( int j = star;j<i- 1 ;j++)
             if (a[j]>a[root])
                 return false ;;
         return ju(a,star,i- 1 )&&ju(a, i, root- 1 );
     }
}
我自己的代码就不贴了,java对数组的操作太麻烦了,需要用到ArrayList和各种类型转换。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值