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); } }