#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define NULLNODE NULL
#define TRUE 1
#define FALSE 0
#define OVERFLOW -1
const int N = 200;
typedef double ElemType ;
typedef int Status ;
typedef struct TNode
{
ElemType elem;
struct TNode *left;
struct TNode* right;
}BTNode, *BTree;
BTree creatBTree();
void InOrderTraverse(BTree T);
Status SearchBST(BTree T, ElemType e, BTree f, BTree *p);
Status InsertBST(BTree *T, ElemType e);
int main(void)
{
BTNode *p = NULL;
int n, i;
scanf("%d", &n);
if(n == 0)
{
printf("error");
return 0;
}
//printf("%d ", n);
for(i =1; i<= n; i++)
{
ElemType e;
scanf("%lf", &e);
// printf("%d", e);
InsertBST(&p, e);
}
InOrderTraverse(p);
return 0;
}
Status SearchBST(BTree T, ElemType e, BTree f, BTree *p)
{
if(!T)
{
*p = f;
return FALSE;
}
if( e == T->elem)
{
*p = T;
return TRUE;
}
else if(e < T->elem)
{
return SearchBST(T->left, e, T, p);
}
else return SearchBST(T->right, e, T, p);
}
Status InsertBST(BTree *T, ElemType e)
{
BTNode * s = (BTree) malloc(sizeof(BTNode));
if(!s)
{
exit(OVERFLOW);
}
s->elem = e;
s->left = NULL;
s->right = NULL;
if(*T == NULL)
{
*T = s;
return TRUE;
}
BTNode *p;
if(!SearchBST(*T, e, NULL, &p))
{
if(e < p->elem)
{
p->left = s;
}
else
{
p->right = s;
}
return TRUE;
}
return FALSE;
}
void InOrderTraverse(BTree T)
{
if(T == NULL) return;
InOrderTraverse(T->left);
printf("%g ", T->elem);
InOrderTraverse(T->right);
}