剑指——二叉搜索树的后序遍历

二叉搜索树的后序遍历

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


解题思路数组

给出的数组是后序遍历,那么最后一个元素对应着树的根节点。code

数组前部分对应左子树,其中元素都小于根节点;后部分对应右子树,其中元素都大于根节点。递归

再分别对左右子树进行递归地判断。io


public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        //在Java中,数组指向unll和数组为空是不同的概念,要将这两种特殊状况都排除
        if(sequence == null || sequence.length == 0)
            return false;
        //
        return helpVerify(sequence, 0, sequence.length - 1);
    }
    /**
    *helpVerify方法用于判断当前这个数组是否知足二叉搜索树的后序遍历数组
    *seq:当前被判断的数组
    *start:当前数组的第一个元素的下标
    *end:当前数组的最后一个元素的下标
    **/
    public boolean helpVerify(int[] seq, int start, int end){
        if(start >= end)
            return true;
        int root = seq[end];
        int i;
        //找到左右子树的分割处
        for(i = start; i < end - 1; i ++){
            if(seq[i] > root)
                break;
        }
        //判断分割处以后的数字是否都大于根节点的值,若不是则返回false
        for(int j = i; j < end - 1; j ++){
            if(seq[j] < root)
                return false;
        }
        //递归地判断左右子树
        return helpVerify(seq, start, i) && helpVerify(seq, i, end - 1);
    }
}
相关文章
相关标签/搜索