剑指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 }