// 华中科大机试
// 九度:1201
//
// 二叉排序树的建立、存储
// 数的先序,后序,中序遍历
//
#include <stdio.h>
#include <string.h>
#define SIZE 105
struct Node{
Node * lchild;
Node * rchild;
int data;
};
Node Tree[SIZE];
int loc;
Node * Creat()
{
Tree[loc].lchild = Tree[loc].rchild = NULL;
//loc++;
return &Tree[loc++];
}
void Preorder(Node *T)
{
printf("%d ", T->data);
if(T->lchild != NULL)
{
Preorder(T->lchild);
}
if(T->rchild != NULL)
{
Preorder(T->rchild);
}
}
void Inorder(Node *T)
{
if(T->lchild != NULL)
{
Inorder(T->lchild);
}
printf("%d ", T->data);
if(T->rchild != NULL)
{
Inorder(T->rchild);
}
}
void Postorder(Node *T)
{
if(T->lchild != NULL)
{
Postorder(T->lchild);
}
if(T->rchild != NULL)
{
Postorder(T->rchild);
}
printf("%d ", T->data);
}
Node * Insert(Node *T, int x)
{
if(T == NULL)
{
T = Creat();
T->data = x;
}
else if(T->data < x)
{
T->rchild = Insert(T->rchild, x);
}
else if(T->data > x)
{
T->lchild = Insert(T->lchild, x);
}
else
{
//nothing
}
return T;
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
//freopen("E:\\out.txt", "w", stdout);
#endif
int n;
while(scanf("%d", &n)!= EOF)
{
Node * T=NULL;
loc=0;
int i, t;
for(i=0; i<n;i++)
{
scanf("%d", &t);
T=Insert(T, t);
}
Preorder(T);
printf("\n");
Inorder(T);
printf("\n");
Postorder(T);
printf("\n");
}
return 0;
}