您的位置:首页 > 其它

多效第16场 HDU 3999 The order of a Tree(二叉树)

2011-09-01 21:09 495 查看
没学过二叉树的先序遍历

#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
.w);
if(~node
.l)
preorder(node
.l);
if(~node
.r)
preorder(node
.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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: