剑指Offer第十五题:二叉搜索树的后序遍历序列

题目描述

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

题目分析

在数组的最后一个数是根节点(这点没有什么问题),从第一个数的位置到第一个能够大于根节点的数就是左子树部分,剩下的到后面根节点前的数都大于根节点的话,那么就是右子树。如果不满足根节点小于左子树,大于右子树那么显然不可能是某个树的后序遍历。

源代码

 

 1 public class Solution {
 2     public boolean VerifySquenceOfBST(int [] sequence) {
 3         if(sequence.length==0)
 4             return false;
 5         if(sequence.length==1)
 6             return true;
 7         return bF(sequence,0,sequence.length-1);
 8         
 9     }
10     
11     public boolean bF(int []r1,int start,int end) {
12         if(start>=end)
13             return true;
14         int i=end;
15         while(i>start&&r1[i-1]>r1[end])
16             i--;
17         for(int j=start;j<i-1;j++) {
18             if(r1[j]>r1[end])
19                 return false;
20         }
21         return bF(r1, start, i-1)&&bF(r1, start, end-1);
22     }
23 }

 

posted @ 2018-09-07 08:35  轻抚丶两袖风尘  阅读(141)  评论(0编辑  收藏  举报