#include <iostream>
using namespace std;
bool isPostOrder(int *data,int start,int end)
{
if(start==end||start==end-1)//终止条件哦 只有两个或一个元素 当然无论怎么样都可以构成后序
return true;
int i=start,key=data[end];
while(i<end&&data[i]<key)//找到第一个比最后大的元素
{
++i;
}
if(i==end)//下面就是递归和判断了
{
return isPostOrder(data,start,i-1);
}
if(i==start)
{
int j=i;
while(j<end)
{
if(data[j++]<key)
return false;
}
return isPostOrder(data,start,end-1);
}
int j=i;
while(j<end)
{
if(data[j++]<key)
return false;
}
return (isPostOrder(data,start,end-1))&&(isPostOrder(data,i,end-1));
}
int main()
{
int data[7]={4,9,6,15,0,18,1};
cout<<isPostOrder(data,0,6);
}
如何判断数组序列是否为后序遍历
最新推荐文章于 2022-07-13 20:40:27 发布