|
发表于 2012-12-21 18:15:20
|
显示全部楼层
哥们,说句实话,你的代码风格不太好,建议你选择一种好的风格来书写代码。其次,你的代码逻辑上有些问题,还有很多低级错误,希望以后写代码要多注意。我在你的基础上做了些修改,贴出来你看看,有问题再提出来讨论。- #include<stdio.h>
- #include<malloc.h>
- typedef struct BSNode
- {
- int elem;
- struct BSNode *lc,*rc;
- }BSNode,*BSTree;
- //BSTree ST;
- void InitBSTree(BSTree &ST)
- {
- ST=(BSTree)malloc(sizeof(BSNode));
- ST->elem=-111;
- ST->lc=NULL;
- ST->rc=NULL;
- printf("创建成功!!\n");
- }
- int Search(BSTree ST,int key)
- {
- int flag=0;
- while(ST)
- {
- if(key>ST->elem)
- {
- ST = ST->rc;
- }
- else if(key<ST->elem)
- {
- ST = ST->lc;
- }
- else
- {
- // 找到节点,flag置1
- flag=1;
- printf("找到数字%d\n",ST->elem);
- break;
- }
- }
- return flag;
- }
- int InsertNode(BSTree ST,int key)
- {
- BSTree p=ST,q,s;
- int flag=0;
- if(!Search(ST,key))
- {
- s=(BSTree )malloc(sizeof(BSNode));
- s->elem=key;
- s->lc=NULL;
- s->rc=NULL;
- flag=1;
- while(p) {
- if(key > p->elem) {
- q = p;
- p = p->rc;
- } else if(key < p->elem) {
- q = p;
- p = p->lc;
- }
- }
- if(key > q->elem) {
- q->rc = s;
- } else {
- q->lc = s;
- }
- // if(ST)
- //ST=s;
- // else
- // {
- //if(key>ST->elem)
- //ST->rc=s;
- //else
- //ST->lc=s;
- // }
- }
-
- return flag;
- }
- void CreateBSTree(BSTree ST,int n)
- {
- int i;
- BSTree r,BT;
- r = (BSTree )malloc(sizeof(BSNode));
- r->lc = NULL;
- r->rc = NULL;
- BT = ST;
- for(i=1;i<=n;i++)
- {
- scanf("%d",&r->elem);
- InsertNode(BT,r->elem);
- }
- }
- void main()
- {
- BSTree ST;
- int a,b,k,d,g,c=1;
- char N,n;
- InitBSTree(ST);
- printf("请输入你要查找的数字\n");
- scanf("%d",&k);
- a = Search(ST,k);
- if(!a)
- {
- printf("查找不存在\n");
- }
- printf("你是否想插入数字 是请输入1 否着输入0\n");
- scanf("%d",&c);
- if(c)
- {
- printf("请输入你想插入的数字\n");
- b=InsertNode(ST,k);
- }
- if(!b)
- printf("元素插入失败\n");
- else
- printf("元素插入成功!!\n");
- printf("是否进行二叉树构造?1是,任意键否\n");
- scanf("%d",&d);
- if(d==1)
- {
- printf("请输入你要的元素个数\n");
- scanf("%d",&g);
- CreateBSTree(ST,g);
- }
- }
复制代码 |
|