题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
![](https://img2018.cnblogs.com/blog/1432431/201907/1432431-20190703152937566-225150900.png)
1 import java.util.Arrays; 2 3 /* 4 * 题目描述 5 * 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 6 * 如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 7 */ 8 9 public class Main23 { 10 11 public static void main(String[] args) { 12 int[] array = {5,7,6,9,11,10,8}; 13 boolean flag = Main23.VerifySquenceOfBST(array); 14 System.out.println(flag); 15 } 16 17 public static boolean VerifySquenceOfBST(int [] sequence) { 18 if (sequence == null || sequence.length <= 0 ) { 19 return false; 20 } 21 22 int len = sequence.length; 23 int root = sequence[len-1]; 24 int i=0; 25 for (i=0;i<len-1;i++) { 26 if (root < sequence[i] ) { // 找到比根结点小的值 左节点 并记录它的索引。 27 break; 28 } 29 } 30 int j = i; 31 32 for (j=i;j<len-1;j++) { 33 if (root > sequence[j]) { //如果后面的数有比 根结点小的 那就肯定不是 后序遍历。 34 return false; 35 } 36 } 37 38 boolean left = true; 39 if (i>0) { 40 left = VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, i)); //迭代 41 } 42 43 boolean right = true; 44 if (i<len-1) { 45 right = VerifySquenceOfBST(Arrays.copyOfRange(sequence, i, len-1)); //迭代 46 } 47 48 return left && right; 49 } 50 51 }