https://www.nowcoder.com/questionTerminal/a861533d45854474ac791d90e447bafd

描述

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

 

解析

BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。完美的递归定义 : ) 。

 

代码

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if (null == sequence || sequence.length <= 0) {
            return false;
        }
        int length = sequence.length;
        return helper(sequence, 0, length - 1);
    }
    
    public boolean helper(int[] sequence, int left, int right) {
        // if(left >= right)    l==r对应的是叶子结点(只有1个节点),l>r对应的是空树,这两种情况都是true
        if (left >= right) {
            return true;
        }
        int root = sequence[right];
        int i = left;
        while (i <= right && sequence[i] < root) {
            i++;
        }
        for (int j = i; j <= right; j++) {
            if (sequence[j] < root) {
                return false;
            }
        }
        return helper(sequence, left, i - 1) && helper(sequence, i, right - 1);
    }
}

 

posted on 2019-04-25 22:41  反光的小鱼儿  阅读(133)  评论(0编辑  收藏  举报