题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
分析:
对于一棵二叉排序树,存在特点:根结点的左子树都小于根结点,根结点的右子数都大于根结点。后序遍历最后访问的是根结点,因此,对于一个整数数组,最后一个元素肯定是根结点,并且如果前部分(左子树)都小于最后一个元素(根结点),后部分(右子树)都大于最后一个元素(根结点)。递归判断前部分和后部分是否是
二叉排序树。
代码如下:
public static boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0)
return false;
return jurge(sequence,0,sequence.length-1);
}
public static boolean jurge(int []sequence,int first,int last){
if(first==last)
return true;
int max=sequence[last];
int temp1=first;
while(sequence[temp1]<max&&temp1<last){temp1++;}
if(temp1!=first)
temp1=temp1-1;
int temp2=temp1+1;
while(sequence[temp2]>max&&temp2<last){
temp2++;
}
if (temp2!=last){
return false;
}else{
return jurge(sequence,first,temp1)&&jurge(sequence,temp1+1,last-1);
}
}