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

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。假设输入的数组的任意两个数字都互不相 同。 例如,下图是后序遍历序列 1,3,2 所对应的二叉搜索树。

 

 

 1 public class Solution {
 2     public boolean VerifySquenceOfBST(int [] sequence) {
 3         if(sequence==null||sequence.length==0) return false;
 4         return verify(sequence,0,sequence.length-1);
 5     }
 6     public boolean verify(int [] sequence,int first,int last){
 7         if(last-first<=1) return true;
 8         int mid = first;
 9         int root = sequence[last];
10         for(int i=first;i<last;i++){
11             if(sequence[i] <= root)
12             mid++;
13         }
14         for(int i=mid;i<last;i++){
15             if(sequence[i] <= root)
16             return false;
17         }
18         return verify(sequence,first,mid-1)&&verify(sequence,mid,last-1);
19         
20     }
21 }

二分法判断

先找出分割处,判断分割处后如果有小于root的则不是二叉搜索树

然后递归分割处左边和右边

递归终止条件是序列只剩一个节点或两个节点时返回true

后序序列最后一个值为root;二叉搜索树左子树值都比root小,右子树值都比root大。

 

posted @ 2019-09-01 11:00  chyblogs  阅读(116)  评论(0)    收藏  举报