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
大大木马 阅读(108)
评论(0) 编辑 收藏 引用