二叉搜索树的后序遍历序列

文章目录


题目内容

什么叫二叉搜索树(有序或排序的二叉树),请参考 多动态图详细讲解二叉搜索树
刚开始,我只知道数组的最后一个序列是二叉树的根节点。然后一点儿思路都没有。于是看 讨论。马上来了感觉(数组的最后一个元素将数组分为两部分,前半部分是左子树,右半部分是右子树)

尝试一

result:答案正确:恭喜!您提交的程序通过了所有的测试用例
code:

import java.util.*;
public class Solution {
    private boolean status=true;
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence.length==0){
            return false;
        }
        status=true;
        isSquenceOfBST(sequence);
        return status;
    }
    
    private void isSquenceOfBST(int [] a){
        if(a.length<=1){
            return ;
        }
        
        /*存在元素大于数组的最后一个元素,且该元素到最后一个元素之间的元素都不小于等于最后一个元素*/
        for(int i=0;i<a.length-1;++i){
            if(a[i]>a[a.length-1]){
                for(int j=i;j<a.length-1;++j){
                    if(a[j]<=a[a.length-1]){
                        status=false;
                        break;
                    }
                }
                
                /*继续对左子树,右子树进行这样的处理*/
                isSquenceOfBST(Arrays.copyOfRange(a,0,i));
                isSquenceOfBST(Arrays.copyOfRange(a,i,a.length-1));
                
                break;
            }
        }
    }
}

思路:数组的最后一个元素将数组分为两部分,前半部分是左子树,右半部分是右子树。其中左子树都要逼最后一个元素小,右子树都要逼最后一个元素大(递归处理)。

结论

二叉搜索树的后序遍历,序列的最后一个元素将序列分成两部分,前半部分是左子树,右半部分是右子树,且左子树的元素都小于最后一个元素,右子树的所有元素都大于最后一个元素

数组的copy函数:

  1. Arrays.copyOf(T[] original, int newLength),返回一个数组

Arrays.copyOf,拷贝original的元素到新的数组(这个数组长度为newLength)中,如果original数组中的元素个数少于newLength,那个新的数组中剩下的值会被设为默认值。
public static T[] copyOf(T[] original, int newLength)

  1. Arrays.copyOfRange(T[] original, int from, int to)

拷贝original的from到to的元素到新数组中。注意,不包含to那个元素

  1. System.arraycopy(Object src, int srcPos, Object dest, int destPos,int length);

从src数组的srcPos位置拷贝length个元素到dest数组的destPos位置

其实,Arrays里面的拷贝方法底层都是调用的System.arraycopy,所以只要会用System.arraycopy就行(不过你要自己创建目标函数,并给它分配大小)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值