二叉查找树的后续遍历序列验证

来源:互联网 发布:mysql数据库语句大全 编辑:程序博客网 时间:2024/05/29 02:14

问题:验证一个给定的序列是否可能是某一棵二叉查找树的后续遍历序列。如果是则返回1,否则返回0。假设输入的数组的任意元素都不相同;

 代码如下:仅供参考。

#include <iostream>#define  TRUE 1#define  FALSE 0using 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;}

原创粉丝点击