#pragma warning(disable:4996)
#include<stdio.h>
#include<queue>
using namespace std;
struct node
{
int data;
node *leftchild;
node *rightchild;
};
int post[35], in[35];
int n;
node *create(int postL,int postR,int inL,int inR)
{
if (postL > postR || inL > inR)
{
return NULL;
}
node *root = new node;
root->data = post[postR];
int k;
for (k = inL; k <= inR; k++)
{
if (post[postR] == in[k])
{
break;
}
}
int numleft = k - inL;
root->leftchild = create(postL, postL + numleft-1, inL, k - 1);
root->rightchild = create(postL + numleft, postR - 1, k + 1, inR);
return root;
}
int num = 0;
void layerorder(node*root)
{
queue<node*> q;
q.push(root);
while (!q.empty())
{
node* now = q.front();
q.pop();
printf("%d", now->data);
num++;
if (num < n)
printf(" ");
if (now->leftchild != NULL)
q.push(now->leftchild);
if (now->rightchild != NULL)
q.push(now->rightchild);
}
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &post[i]);
}
for (int i = 0; i < n; i++)
{
scanf("%d", &in[i]);
}
node *root=create(0, n - 1, 0, n - 1);
layerorder(root);
return 0;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交