输入一个整数数组,判断该数组是否是某二叉搜索树的后序遍历的结果。若是是则输出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); } }