题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
在后序遍历得到的序列中,最后一个数字是树的根节点的值。数组中前面的数字可以分为两部分:第一部分是左子树节点的值,它们都比根节点的值小;第二部分是右子树节点的值,它们都比根节点的值大。
bool VerifySquenceOfBST(int sequence[],int length)
{
if(sequence==nullptr||length<=0)
return false;
//在二叉搜索树中左子树节点的值小于根节点的值
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=VerifySequenceOfBST(sequence,i);
//判断右子树是不是二叉搜索树
bool right=true;
if(i<length-1)
right=VerifySequenceOfBST(sequence+i,length-i-1);
return (left&&right);
}