问题:验证一个给定的序列是否可能是某一棵二叉查找树的后续遍历序列。如果是则返回1,否则返回0。假设输入的数组的任意元素都不相同;
代码如下:仅供参考。
#include <iostream>
#define TRUE 1
#define FALSE 0
using namespace std;
//data [stat,end]
//验证data中的元素是否为某棵二叉查找树的后续遍历
bool IsFindTreePostOrder(int *data,int start,int end)
{
if(!data)
return TRUE;
if (start>=end)
return TRUE;
int root=*(data+end);//最后一个元素是根元素
int i,j;
for (i=end;i>start&&*(data+i-1)>root;i--);//[end-1,i] 右子树应该包含的元素
for(j=i;j>start&&*(data+j-1)<root;j--);//[i-1,j] 左子树应该包含的元素 另外如果j==stat 说明以root为根成功的将所有元素分为左右子树
if(j>start) //以root为根未能将所有元素分为左右子树,故不可能是某棵二叉查找树的后续遍历
return FALSE;
return IsFindTreePostOrder(data,i,end-1)&&//验证data右子树是否为某棵二叉查找树的后续遍历
IsFindTreePostOrder(data,j,i-1);//验证data左子树是否为某棵二叉查找树的后续遍历
}
int main()
{
int data[]={7,4,5,6};
cout<<IsFindTreePostOrder(data,0,3)<<endl;
}
验证序列是否为二叉查找树后续遍历

本文提供了一个方法来判断给定的序列是否可以作为一棵二叉查找树的后续遍历序列,包括代码实现和逻辑解析。
2534

被折叠的 条评论
为什么被折叠?



