#include<bits/stdc++.h>
using namespace std;
typedef struct node* bintree;
int post[40],in[40];
int n;
vector<node> tree;
int p=-1;
struct node{
int data;
int l,r;
};
int create(int postl,int postr,int inl,int inr)
{
int index;
if (postl >postr || inl > inr)
return -1;
char data=post[inr];
for(int i=0;i<n;i++)
{
if(in[i]==data)
{
index=i;
break;
}
}
int cnt=index-inl;//cnt左子树的数量 左子树的下一个位置
int pos=++p;
tree[pos].data=data;
tree[pos].l=create(postl,postl+cnt-1,inl,inl+cnt);
tree[pos].r=create(postr-1-cnt,postr-1,index+1,inr);
return pos;
}
void dfs(int x)
{
if (x == -1)
return;
cout << tree[x].data << " ";
dfs(tree[x].l);
dfs(tree[x].r);
return;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>post[i];
}
for(int i=0;i<n;i++)
{
cin>>in[i];
}
bintree tree=NULL;
create(0,n-1,0,n-1);
dfs(0);
}
L2-006 树的遍历 (25 分)
最新推荐文章于 2022-04-18 21:14:53 发布