题目:二叉搜索树的后序遍历序列
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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 }