|
发表于 2003-6-27 21:36:09
|
显示全部楼层
我来做二叉树的那道
- #include <stdio.h>
- #define NUM 10
- struct node{
- int data;
- struct node *lchild;
- struct node *rchild;
- };
- void make(struct node **boot,int a[]);
- void middle(struct node *boot);
- void left(struct node *boot);
- main()
- {
- int a[NUM]={6,16,81,61,65,8,71,6,89,63};
- int i;
- struct node *boot=NULL;
- for(i=0;i<NUM;i++)
- printf("%5d",a[i]);
- printf("\n");
- make(&boot,a);
- middle(boot);
- printf("\n");
- left(boot);
- printf("\n");
- }
- void make(struct node **boot,int a[]) //生成二叉树
- {
- struct node *p,*leave;
- int i;
- for(i=0;i<NUM;i++)
- {
- p=(struct node *)malloc(sizeof(struct node));
- p->data=a[i];p->lchild=NULL;p->rchild=NULL;
- leave=*boot;
- if(*boot==NULL) *boot=p;
- else
- {
- while((leave->lchild!=p)&&(leave->rchild!=p))//找到适合二叉树插入的叶子结点
- {
- if(leave->data>p->data)
- if(leave->lchild==NULL) leave->lchild=p;
- else leave=leave->lchild;
- else
- if(leave->rchild==NULL) leave->rchild=p;
- else leave=leave->rchild;
- }
- }
- }
- }
- void middle(struct node *boot) //中序遍历
- {
- if(boot!=NULL)
- {
- middle(boot->lchild);
- printf("%5d",boot->data);
- middle(boot->rchild);
- }
- }
- void left(struct node *boot) //前序遍历
- {
- if(boot!=NULL)
- {
- printf("%5d",boot->data);
- left(boot->lchild);
- left(boot->rchild);
- }
- }
复制代码 生成的二叉树为:- 6
- \
- 16
- / \
- 8 81
- / / \
- 6 61 89
- \
- 65
- / \
- 63 71
复制代码 [root@localhost tmp]# gcc firth.c
[root@localhost tmp]# ./a.out
6 16 81 61 65 8 71 6 89 63
6 6 8 16 61 63 65 71 81 89
6 16 8 6 81 61 65 63 71 89
那个什么环的。每个同学带的密码没有提供的吗?如果没有的话,怎么得到?
纸牌的那个,随便用个循环不就行了吗?迷宫的那个我就真的更不懂了。因为我不知道你要创造的迷宫是有什么规定,如何造。
ralphlee以后贴代码要记得用置顶贴子说明的方法。
|
|