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

来源:互联网 发布:java 初始化常量 编辑:程序博客网 时间:2024/06/01 10:36

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

思路:二叉搜索树即根节点比左子树的所有节点的值都大,并且比右子树左右结点的值都小,又因为数组要判断数组是不是二叉树的后续遍历序列,假设该序列是二叉搜索树的后序遍历序列,那么序列的最后一个元素一定是根节点,到这里,我们的解题思路如下:
首先,从第一个元素开始起,找到第一个比最后元素大的元素位置p,则该位置之前的元素全是根节点的左节点的值,
然后,再判断从当前位置p起,一直到根节点,有没有比根节点小的节点存在,如果有,则不满足二叉搜索树的条件,如果没有,则将p前后的节点分成两颗子树再进行递归。

import java.util.Arrays;public class Solution {    public boolean VerifySquenceOfBST(int [] sequence) {        if (sepuence == null || sepuence.length == 0)            return false;        int i = 0;        for (; i < sequence.length; i++){            if (sequence[i] > sequence[sequence.length - 1])                break;        }        int p = i;        for (; p < sequence.length; p++){            if (sequence[p]  < sequence[sequence.length - 1])                return false;        }        boolean left  = true;        boolean right = true;        if (i > 0 && i < sequence.length - 1){            left = VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, i);            right = VerifySquenceOfBST(Arrays.copyOfRange(sequence, i, sequence.length - 1);        }        return left && right;    }    }
0 0