题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:左节点,右节点,根节点是后序遍历的顺序。那么,左子树都小于根节点,右子树都大于根节点。
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
//找到根节点,左子树都比根节点小,右子树都比根节点大。
//从右向左找到第一个比根节点小的数
if(sequence.length==0)
return false;
int len=sequence.length;
return helper(sequence,0,len-1);
}
private boolean helper(int[] sequence,int l,int r){
if(l>=r)
return true;
int i=r;
//找到第一个比根节点小的值
while(i>l&&sequence[i-1]>sequence[r])
--i;
//从l到i,判断是否有比根节点大的值,如果有的话就返回false;
for(int j=i-1;j>=l;j--){
if(sequence[j]>sequence[r])
return false;
}
return helper(sequence,l,i-1)&&helper(sequence,i,r-1);
}
}