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和各种类型转换。
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页