小菜鸡,这道题都没AC,伤心了
#include <stdio.h>
#include <malloc.h>
typedef struct Node
{
int num;
struct Node *lchild, *rchild;
};
void build(Node* root, int *pre, int *in, int l2)
{
root = (Node *)malloc(sizeof(Node)); //分配存储空间
root->num = pre[0];
root->lchild = root->rchild = NULL;
int id = 0;
for(; id < l2; id++)
if(in[id] == pre[0])
break;
if(id) //左子树不为空
build(root->lchild, pre+1, in, id);
if(id != l2) //右子树不为空
build(root->rchild, pre+id+1, in+id+1, l2);
}
void backOrder(Node *root)
{
if(root->lchild)
backOrder(root->lchild);
if(root->rchild)
backOrder(root->rchild);
printf("%d ", root->num);
}
int main()
{
int n;
while(~scanf("%d", &n))
{
Node *root;
int *preSeq = (int *)malloc(sizeof(int) * n);
int *inSeq = (int *)malloc(sizeof(int) * n);
for(int i = 0; i < n; i++)
scanf("%d", &inSeq[i]);
for(int i = 0; i < n; i++)
scanf("%d", &preSeq[i]);
build(root, preSeq, inSeq, n);
backOrder(root);
}
return 0;
}