没学过二叉树的先序遍历
#include <cstdio>
#include <string.h>
const int maxn=100050;
struct Node{
int l,r,w;
}node[maxn];
int m;
int cnt;
void insert (int n,int root)
{
if(node[root].w<n)//右子树
{
if(~node[root].r)
{
insert(n,node[root].r);
}
else
{
node[root].r=cnt;
node[cnt++].w=n;
}
}
else
{
if(~node[root].l)
{
insert(n,node[root].l);
}
else
{
node[root].l=cnt;
node[cnt++].w=n;
}
}
}
void preorder(int n)
{
printf(" %d",node[n].w);
if(~node[n].l)
preorder(node[n].l);
if(~node[n].r)
preorder(node[n].r);
}
inline void init ()
{
memset (node , -1 , sizeof(node));
cnt=0;
}
int main ()
{
int w;
while (~scanf("%d",&m))
{
init();
scanf("%d",&w);
node[cnt++].w=w;
for (int i=1 ; i<m ; ++i)
{
scanf("%d",&w);
insert (w,0);
}
printf("%d",node[0].w);
if(~node[0].l)
preorder(node[0].l);
if(~node[0].r)
preorder(node[0].r);
printf("\n");
}
return 0;
}