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

35 篇文章 0 订阅
15 篇文章 0 订阅

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

2、思路:后续遍历中,最后一个元素为根节点,小于根节点的元素在左子树,大于根节点的在右子树。

3、代码:

public boolean VerifySquenceOfBST(int [] sequence) {
        int start = 0, end = sequence.length - 1;
        if(end == -1)
            return false;
        boolean isOrder = verifySquenceOfBST(sequence, start, end);
        return isOrder;
    }

    private boolean verifySquenceOfBST(int[] sequence, int start, int end) {
        boolean isOrder = true;
        int i, pos = end;
        int root_val = sequence[end]; 

        //找到分界点,pos为右子树的起点
        for(i = start; i < end; i++){
            if(sequence[i] > root_val){
                pos = i;
                break;
            }
        }
        //遍历右子树,需要右子树每一个阶段都大于root_val才满足要求
        for(i = pos; i < end; i++){
            if(sequence[i] < root_val)
                isOrder = false;
        }

        boolean isLeftOrder = true, isRightOrder = true;
        if(isOrder){
            if(pos - start > 1){ //左子树的节点数大于1
                isLeftOrder = verifySquenceOfBST(sequence, start, pos - 1);
            }
            if(end - pos > 1){ //右子树结点数大于1
                isRightOrder = verifySquenceOfBST(sequence, pos, end - 1);
            }
        }

        return isOrder && isLeftOrder && isRightOrder;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值