Fork me on GitHub

二叉搜索树的后序遍历序列

题目描述

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

 

posted @ 2019-07-03 15:42  gentleKay  阅读(476)  评论(0编辑  收藏  举报