HDU-1710知道前序中序求后序
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int p1[1001];
int p2[1001];
void judge(int a,int b,int n,int flag)
{
if(n==1){ //如果存在左子树或右子树就直接输出
cout<<p1[a]<<" ";
return ;
}else if(n<=0)return ; //如果不存在左子树或右子树就返回上一层
int i; //继续划分为左子树和右子树
for(i=0;p1[a]!=p2[b+i];i++);//找到划分点也就是根节点
judge(a+1,b,i,0); //左子树遍历
judge(a+i+1,b+i+1,n-i-1,0); //右子树遍历
if(flag==1) cout<<p1[a]; //最原始的跟节点
else cout<<p1[a]<<" ";
}
int main()
{
int n,i;
while(cin>>n){
for(i=1;i<=n;i++)cin>>p1[i];
for(i=1;i<=n;i++)cin>>p2[i];
judge(1,1,n,1);
cout<<endl;
}
return 0;
}
红尘中,能够将一个人轻轻放在心中,寂然相爱,默然相守,与我。已然是一种幸福。
好好学习,相信自己是最好的。
本文介绍了一种基于C++实现的算法,该算法可以根据给定的二叉树前序和中序遍历序列来输出对应的后序遍历序列。通过递归方式划分左右子树,最终输出完整的后序遍历序列。
2118

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



