建立排序树
#include<stdio.h>
struct node
{
node *lchild;
node *rchild;
int r;
}tree[102];
int loc;
node *create()
{
tree[loc].lchild = tree[loc].rchild = NULL;
return &tree[loc ++];
}
void *build(int x,node *t)
{
node *q = t;
node *p = create();
p -> r = x;
while(q -> rchild != NULL || q -> lchild != NULL)
{
while(q -> r <= x && q -> rchild != NULL)
q = q ->rchild;
while(q -> r >= x && q -> lchild != NULL)
q = q -> lchild;
if(q -> lchild != NULL && q ->r <= x)
break;
if(q -> rchild != NULL && q -> r >= x)
break;
}
if(q -> r <= x)
{
q -> rchild = p;
}
else
{
q -> lchild = p;
}
}
void preorder(node *p)
{
printf("%d ",p -> r);
if(p -> lchild != NULL)
preorder(p -> lchild);
if(p -> rchild != NULL)
preorder(p -> rchild);
}
void inorder(node *p)
{
if(p -> lchild != NULL)
inorder(p -> lchild);
printf("%d ",p -> r);
if(p -> rchild != NULL)
inorder(p -> rchild);
}
void postorder(node *p)
{
if(p -> lchild != NULL)
postorder(p -> lchild);
if(p -> rchild != NULL)
postorder(p -> rchild);
printf("%d ",p -> r);
}
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
int x;
loc = 0;
node *t;
scanf("%d",&x);
t = create();
t -> r = x;
for(int i = 1; i != n ; i ++)
{
scanf("%d",&x);
build(x,t);
}
preorder(t);
printf("\n");
inorder(t);
printf("\n");
postorder(t);
printf("\n");
}
return 0;
}