题目:略
分析:考虑二元查找树的后序遍历结果最后一位必是根节点,序列的前部分为树的左子树,后部分为右子树,
其中左子树上的节点值都小于根节点的值,右子树上的节点值都大于于根节点的值。
这样就成了一个 递归的操作。
即把序列按照比根节点大小的关系分为左右两个部分,我们递归确认左右两部分是不是二元查找树的后序遍历结果即可。
代码:
int VertifySquenceOfBst(element list[], int length)
{
if(list ==NULL || length<=0)
{
return 0;
}
int i=0;
int j=0;
element root =list[length-1];
while(i<length-1)
{
if(list[i]<root)
++i;
else
break;//找到第一个大于根结点的值下标
}
j=i;
while(j<length-1)
{
if(list[j]<root)
return 0;//右部分存在小于根结点的值,则不是后序遍历结果
else
++j;
}
//递归检查两个分区left,right是不是
int left=1;
if(i>0)
left=VertifySquenceOfBst(list,i);
int right=1;
if(i<length-1)
right=VertifySquenceOfBst(list+i,length-i-1);
return (left&&right);
}