求大侠调一下我的二叉排序树,运行九死循环
#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=ST->rc=NULL;
printf("创建成功!!");
}
int Search(BSTree ST,int key)
{
int flag=0;
while(ST)
{
if(key>ST->elem)
{
ST->rc;
}
else
{
if(key<ST->elem)
{
ST->lc;
}
else
{
flag=1;
printf("%d",ST->elem);
}
}
}
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;
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;
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("请输入你要查找的数字");
scanf("%d",&k);
Search(ST,k);
if(a)
{
printf("查找不存在");
}
printf("你是否想插入数字 是请输入1否着输入0\n");
scanf("%d",&c);
if(c)
{printf("请输入你想插入的数字");
b=InsertNode(ST,k);}
else
;
if(a)
{printf("元素插入失败");}
else
printf("元素插入成功!!");
printf("是否进行二叉树构造?1是,任意键否");
scanf("%d",&d);
if(d==1)
{
printf("请输入你要的元素个数");
scanf("%d",&g);
CreateBSTree(ST,g);
}
}
哥们,说句实话,你的代码风格不太好,建议你选择一种好的风格来书写代码。其次,你的代码逻辑上有些问题,还有很多低级错误,希望以后写代码要多注意。我在你的基础上做了些修改,贴出来你看看,有问题再提出来讨论。#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);
}
} 说实话楼主这代码我看了十分钟真不知道写的什么?? 无回帖,不论坛,这才是人道。
页:
[1]