题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:首先我们应该直到二叉搜索树的特点是根节点左边的所有元素都小于它,右边的所有元素都大于它,
这样我们只要使用递归的方法判断根节点的左边是否都小于它和右边是否都大于它就可以。
具体算法:
1.找根节点(后序遍历的最后一个数就是根节点)
2.寻找第一个>=根节点的值
3.如果该值的右边存在小于它的数,则返回false,
4.如果不存在,则分别判断该值的左边(不包括该值和根节点)是否符合二叉搜索树,也就是执行1-3步 ,返回两个结果的 与值
public boolean VerifySquenceOfBST(int [] sequence,int begin,int end)
if(sequence==null||sequence.length==0)
{
return false;
}
int root = sequence[end];
int index = end;
for(int i=begin;i<=end;i++)
{
if(sequence[i]>=root)
{
index = i;
break;
}
}
for(int j=index;j<end;j++)
{
if(sequence[j]<root)
{
return false;
}
}
boolean left = true;
if(begin<=(index-1)&&(index-1)>0)
{
left = seq(sequence,begin,index-1);
}
boolean right = true;
if(index>=end-1&&((end-1)>0))
{
right = seq(sequence,index,end-1);
}
return (left&&right);
}