//首先建立二叉排序树,然后前、中、后序遍历
// 若x小于根结点数值,插入其左子树中
// 若x大于根结点数值,插入其右子树中
// 若x等于根结点数值,根据题目要求直接忽略
#include<stdio.h>
#include<string.h>struct Node{ // 二叉树结构体
Node *lchild; // 左儿子指针
Node *rchild; // 右儿子指针
int c;
}Tree[110]; // 静态数组
int loc; // 静态数组中被使用元素个数
Node *creat(){ // 申请未使用的结点
Tree[loc].lchild=Tree[loc].rchild=NULL;
return &Tree[loc++];
}
void postOrder(Node *T){ // 后序遍历
if(T->lchild!=NULL) postOrder(T->lchild);
if(T->rchild!=NULL) postOrder(T->rchild);
printf("%d ",T->c);
}
void inOrder(Node *T){ // 中序遍历
if(T->lchild!=NULL) inOrder(T->lchild);
printf("%d ",T->c);
if(T->rchild!=NULL) inOrder(T->rchild);
}
void preOrder(Node *T){ // 前序遍历
printf("%d ",T->c);
if(T->lchild!=NULL) preOrder(T->lchild);
if(T->rchild!=NULL) preOrder(T->rchild);
}
Node *Insert(Node *T,int x){ // 插入数字 ,即建立二叉排序树
if(T==NULL){ // 若当前树为空,则将数字直接插入其根结点
T=creat();
T->c=x;
return T;
}
else if(x < T->c) // 若x小于根结点数值,插入其左子树中
T->lchild=Insert(T->lchild,x);
else if(x > T->c) // 若x大于根结点数值,插入其右子树中
T->rchild=Insert(T->rchild,x);
return T; // 若x等于根结点数值,根据题目要求直接忽略
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
loc=0;
Node *T=NULL;
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
T=Insert(T,x);
}
preOrder(T); printf("\n");
inOrder(T); printf("\n");
postOrder(T); printf("\n");
}
return 0;
}