【剑指offer】十六,二叉搜索树的后序遍历序列

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同
 
分析:对于二叉搜索的遍历,值得注意的是中序遍历将产生一个递增的数组,后序遍历产生的数组根节点是数组的最后一个数字,根节点的左子树遍历的结果在数组的左部分这部分结果的值都小于根节点的值,右子树遍历的结果在数组的右部分这部分的值都大于根节点的值,是经纬分明的,所以我们可以利用递归来求解此题,先根据跟节点找出左子树和右子树,队左右子树再分别重复此过程,代码如下:
 1 public class Solution {
 2    public boolean VerifySquenceOfBST(int [] sequence) {
 3         boolean res  = false ;
 4         if(sequence.length==0||sequence==null){
 5             return res ;
 6         }
 7         else if(sequence.length==1){
 8             res = true ;
 9             return res ;
10         }
11         else res = verifyQquenceOfBST(sequence ,0,sequence.length-1) ;
12         return res ;
13     }
14     public boolean verifyQquenceOfBST (int[] array ,int begin,int end ){
15         boolean res  = false ;
16         if(begin==end){
17             return  true ;
18         }
19         int mid = begin ;
20         while(array[mid]<array[end]&&mid<end){
21             mid++ ;
22         }
23         if(mid==end){
24             res = verifyQquenceOfBST ( array ,begin,end-1 ) ;
25         }
26         else if(mid==begin){
27             for(int i = begin ; i<end ;i++){
28                 if(array[i]<array[end]){
29                     return false ;
30                 }
31                  
32             }
33             res = verifyQquenceOfBST ( array ,begin,end-1 ) ;
34         }
35         else{
36                 for(int i = mid ; i<end ;i++){
37                 if(array[i]<array[end]){
38                     return false ;
39                 }
40             }
41             res = verifyQquenceOfBST ( array ,begin,mid-1 ) &&verifyQquenceOfBST ( array ,mid,end-1 ) ;
42         }
43         return res ;
44     }
45 }

 

posted on 2015-09-11 15:05  小猿之路  阅读(394)  评论(0)    收藏  举报

导航