二叉搜索树的后序遍历

题目描述:
输入一个 非空整数数组 ,判断该数组是不是某 二叉搜索树的后序遍历的结果 。如果是则输出 Yes, 否则输出 No 。假设输 入的数组的任意两个数字都互不相同。
二叉搜索树:左子树一定小于根结点,右子树一定大于根节点,所有的子树也满足这样的条件
例如:

思路:①对于合法的序列,二叉搜索树的后续遍历的最后一个节点是根结点 

           ②如果去掉最后一个结点,可以把序列分成2部分,前一部分(左子树)小于根结点,后一部分(右子树)大于根结点

           ③由于每次子树都要满足,所以左右子树都需要递归求解。

代码实现:

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence.length == 0){
            return false;
        }
        
        return VerifySquenceOfBSTHelper(sequence,0,sequence.length-1);
    }
    public boolean VerifySquenceOfBSTHelper(int [] sequence,int start,int end){
        //因为要划分区间  所以需要 start 和end
        if(start >= end){//递归出口的设置
            return true;
            }
        
        //区域的划分
        int root = sequence[end];//序列最后一个数
        int i = start;
        while(i < end && sequence[i] < root ){
            i++;
        }
        //条件的检测
        for(int j = i ; j < end;j++){
            if(sequence[j] < root){
                return false;
            }
        }
        //左右子树都要满足条件   
        //i位置是左子树的根结点,所以  i-1
        return  VerifySquenceOfBSTHelper(sequence,start,i-1) &&  VerifySquenceOfBSTHelper(sequence,i,end-1);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值