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

本贴最后更新于 2259 天前,其中的信息可能已经斗转星移

题目描述

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

解题思路

已知条件后序序列最后一个值为 root;二叉搜索树左子树值都比 root 小,右子树值都比 root 大。

  • 确定 root;

  • 遍历序列(除去 root 结点),找到第一个大于 root 的位置,则该位置左边为左子树,右边为右子树;

  • 遍历右子树,若发现有小于 root 的值,则直接返回 false;

  • 分别判断左子树和右子树是否仍是二叉搜索树(即递归步骤 1、2、3)。

代码

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if (sequence == null || sequence.length == 0)
            return false;
        return isPostBST(sequence, 0, sequence.length-1);
    }
    
    private boolean isPostBST(int[] sequence, int start, int end) {
        if (end <= start)
            return true;
        int i = start;
        for (; i < end; i++) {
            if (sequence[i] > sequence[end])
                break;
        }
        for (int j = i; j < end; j++) {
            if (sequence[j] < sequence[end])
                return false;
        }
        return isPostBST(sequence, start, i-1) && isPostBST(sequence, i, end-1);
    }
}

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...