试题:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
代码:
抓住后序遍历的特点,数组的最后一个数为树的根,那么前面的数可以分成两个部分,一部分属于左子树,小于根节点值;一部分属于右子树,大于根节点值
public class Solution {
private boolean handle(int[] sequence, int start, int end){
if(start>=end) return true;
int mid = end;
while(mid>start && sequence[mid-1]>sequence[end]) --mid;
for(int j=mid-1; j>=start; j--)
if(sequence[j]>sequence[end]) return false;
return handle(sequence, start, mid-1) && handle(sequence, mid, end-1);
}
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0) return false;
return handle(sequence, 0, sequence.length-1);
}
}