题目要求:输入一个整数数组,判断这是不是一个某二叉搜索树的后序遍历的结果。假设输入的数组任意两个字不相同。
首先进行分析:由于后序遍历最后一个一定是根节点的值,而数组可以分为两部分的值,第一部分是对应二叉树的左子树节点的值,都小于根节点,第二部分是对应二叉树的右子树的节点值,都大于根节点。至此大家估计有了个大概的想法了,就是利用这种规律来递归的判断是不是这个二叉搜索树的的后序遍历。
bool VerifySquenceOfBST(int sequence[],int length)
{
if(sequence==NULL||length<=0)
return false;
int root=sequence[length-1];
int i=0;//在二叉树中找小于根节点的点
for(;i<length-1;i++)
{
if(sequence[i]>root)
break;
}
//在二叉树中搜索右子树大于根节点
int j=i;
for(;j<length-1;j++)
{
if(sequence[j]<root)
return false;
}
//判断左子树是不是二叉搜索树
bool left=true;
if(i>0)
left=VerifySquenceOfBST(sequence,i);
bool right=true;
if(i<length-1)
right= VerifySquenceOfBST(sequence+i,length-i-1);
return(left&&right);
}