剑指offer-二叉搜索树的后序遍历序列

题目:二叉搜索树的后序遍历序列

题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

思路:二叉搜索树首先是有序的,其后序遍历是“左右根”的顺序,根节点总是在后面

如:

                                6
                   / \
                  3 9
                 / \ / \
                1 5 8 10

期后序遍历是:153 8109 6

在跟节点已知后我们便可以找到左右子树的位置,然后判断当前根节点的右子树是否都大于根节点,然后对每个左右子树再进行上面的操作,递归进行判断,直至判断到最终的叶子节点处

代码:

 1 public class Solution {
 2     public boolean VerifySquenceOfBST(int [] sequence) {
 3         if(sequence.length==0)return false;
 4         return isBST(sequence,0,sequence.length-1);
 5     }
 6     private boolean isBST(int[]a,int start,int end){
 7         if(start>=end)return true;
 8         int right=0;
 9        while(a[right]<a[end]){
10            right++;
11        }
12         for(int j=right;j<end;j++){
13             if(a[j]<a[end]) return false;
14         }
15       return isBST(a,start,right-1)&&isBST(a,right,end-1);  
16     }
17 }

 

posted @ 2018-06-12 15:33  pathjh  阅读(186)  评论(0编辑  收藏  举报