您的位置:首页 > 其它

判断一个序列是不是二叉查找树的后序遍历结果

2013-05-22 14:53 267 查看
#include <cstdlib>
#include <iostream>

using namespace std;
//判断一个序列是不是二叉查找树的后序遍历结果
//2013.05.22 PM
bool isBack(int *p, int begin, int end)
{
//边界值判断
if(begin>end)
return false;
//序列为空或者只有一个元素,不用判断,怎样都是真
//if(end==0 ||end==1),这个判断有问题,
//return true;
if(begin==end)
return true;
//后序遍历最后一个元素是根
int root=*(p+end);
int i=begin;
//开始的下标,直到遇到比根大的 元素停止。
for(i;i!=end;++i)
{
if(*(p+i)>root)
break;
}
//mid的位置是第一个比root大的元素的位置
int mid=i;
//从这点开始,出现比根小的元素停止,说明不是后序的
for(int j=mid;j!=end;++j)
{
if(*(p+j)<root)
return false;
}
//递归左边的序列
bool left =isBack(p,begin,mid-1);
//递归右边的序列
bool right =isBack(p,mid,end-1);
return (left&&right);

}

int main(int argc, char *argv[])
{
//二叉查找树序列{1 2 3 4 5 6 7}
//的后序排列为 1325764;
//结果为真
int arr[]={1,3,2,5,7,6,4};
//int *p=arr;
bool res=isBack(arr,0,6);
cout<<res<<endl;

system("PAUSE");
return EXIT_SUCCESS;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐