The most watery binary tree
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
struct node
{
int value;
int left;
int right;
node()
{
value=0;
left=-1;
right=-1;
}
};
node tree[101000];
int tail;
int read()
{
int s=0,f=1;
char in=getchar();
while(in<'0'&&in>'9')
{
if(in=='-')
f=-1;
in=getchar();
}
while(in>='0'&&in<='9')
{
s=(s<<1)+(s<<3)+in-'0';
in=getchar();
}
return s*f;
}
void insert(int val,int num)
{
if(tree[num].left==-1)
{
tree[num].value=val;
tree[num].left=++tail;
tree[num].right=++tail;
return ;
}
if(val>tree[num].value)
insert(val,tree[num].right);
if(val<tree[num].value)
insert(val,tree[num].left);
return ;
}
void visit(int num)
{
if(tree[num].left==-1)
return ;
visit(tree[num].left);
printf("%d ",tree[num].value);
visit(tree[num].right);
}
int main()
{
int n=read();
int data;
tail=1;
for(int i=1;i<=n;i++)
{
data=read();
insert(data,1);
}
visit(1);
}