http://ac.jobdu.com/problem.php?id=1201二叉查找树的建立和遍历,好久没写代码了,练习华科上机题。这道题调试了半个小时,真心生疏咯。。
//二叉查找树的建立和遍历,纯C代码
#include <stdio.h>
#include <stdlib.h>

typedef struct node


{
int data;
struct node* lchild;
struct node* rchild;
}*BSTree;

int n,t;

void Insert(BSTree root,int a)


{
BSTree p,q,f;
p=root;
q=(BSTree)malloc(sizeof(struct node));
q->data=a;
q->lchild=q->rchild=NULL;
while(p)

{
f=p;
if(p->data==a)

{
t++;
return ;
}
if(p->data>a)
p=p->lchild;
else
p=p->rchild;
}
if(f->data>a)
f->lchild=q;
else
f->rchild=q;
//free(q);
}

void Create(BSTree root)


{
int a,i;
scanf("%d",&a);
root->data=a;
root->lchild=root->rchild=NULL;
for(i=1;i<n;i++)

{
scanf("%d",&a);
Insert(root,a);
}
}

void InOrder(BSTree root)


{
if(root==NULL)
return;
InOrder(root->lchild);
printf("%d ",root->data);
InOrder(root->rchild);
}

void PreOrder(BSTree root)


{
if(root==NULL)
return;
printf("%d ",root->data);
PreOrder(root->lchild);
PreOrder(root->rchild);
}

void PostOrder(BSTree root)


{
if(root==NULL)
return;
PostOrder(root->lchild);
PostOrder(root->rchild);
printf("%d ",root->data);
}

int main()


{
BSTree root=(BSTree)malloc(sizeof(struct node));
while(scanf("%d",&n)!=EOF)

{
t=0;
Create(root);
PreOrder(root);
printf("\n");
InOrder(root);
printf("\n");
PostOrder(root);
printf("\n");
}
free(root);
return 0;
}
posted on 2012-03-17 21:57
大大木马 阅读(112)
评论(0) 编辑 收藏 引用