输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。假设输入的数组的任意两个数字都互不相同。
例如,下图是后序遍历序列 1,3,2 所对应的二叉搜索树。
二叉搜索树,左子树比根节点小,右子树比根节点大,最后一个节点是根节点,和根节点比大小。
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence==null||sequence.length==0) return false;
return verify(sequence,0,sequence.length-1);
}
private boolean verify(int[] sequence,int first,int last){
if(last-first<=1) return true;
int rootVal=sequence[last];
int cutIndex=first;
while(cutIndex<last&&sequence[cutIndex]<=rootVal){
cutIndex++;
}
for(int i=cutIndex;i<last;i++)
{
if(sequence[i]<rootVal) return false;
}
return verify(sequence,first,cutIndex-1)&&verify(sequence,cutIndex,last-1);
}
}
错误:
1、第一个判断条件是 if(last-first<=1) return true;
不是last==first,要小于等于1,只有两个节点时可以是遍历序列;
2、while(cutIndex<last&&sequence[cutIndex]<=rootVal),判断条件是和rootVal根节点比较,可以等于
3、for(int i=cutIndex;i<last;i++)
for循环里面是小于last,不是等于