在C

时间:2018-04-11 23:35:25

标签: c

我写了一个程序,创建一个二进制搜索树,在其中动态插入字符串并按顺序显示bst。问题是当我在我的二进制搜索树中插入字符串以查看它是否有效,因为它运行就像我真的在我的树中插入一些东西,但我并不是真的这样做,为什么每次我尝试显示它时告诉我我的树是空的,我真的不知道问题是什么。

也许创建函数是错误的但我不这么认为,它看起来并没有真正在我的结构中插入任何字符串。 也许创建函数是错误的,但我不这么认为,看起来它并没有在我的结构中插入任何字符串。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <limits.h>

typedef struct bst{
char *info;
struct bst *sx;
struct bst *dx;
}bst;

bst* root = NULL;
bst* temp = NULL;

bst* insert(bst*,char *);
bst* create(char *);
void inorder(bst *);

void main()
{
int select;
int count=0;

printf("\nSelect one of these options:\n");
printf("[1] insert a string\n");
printf("[2] display inorder\n");
printf("[3] exit\n");

while(1){

printf("\nEnter your choice : ");
scanf("%d", &select);

switch (select){

case 1: ;
char *key;
printf("\ninsert string: ");
scanf("%s",key);
insert(root,key);
count++;
printf("There are %d nodes\n",count);
break;
case 2: 
inorder(root);
break;
case 3:
exit(0);
break;

default :
printf("Wrong");
break;
}
}
}
bst* insert(bst* t,char* value){

if(t==NULL)
t=create(value);

else if(t!=NULL){

if(strcmp(value,t->info)<0)
t->sx=insert(t->sx,value);
else if(strcmp(value,t->info)>0)
t->dx=insert(t->dx,value);
}
return t;
}

bst* create(char *data){

temp=malloc(sizeof(struct bst));
temp->info=malloc((strlen(data)+1)*sizeof(char));
strcpy(temp->info,data);
temp->sx = temp->dx = NULL;

return temp;

}


void inorder(bst *t){

if (root == NULL){
printf("No elements in a tree to display");
return;
}

if (t->sx != NULL) 
inorder(t->sx);
printf("%s -> ", t->info);
if (t->dx != NULL) 
inorder(t->dx);
}

任何人都知道如何解决它?

1 个答案:

答案 0 :(得分:0)

您永远不会设置root的值(除了NULL),因此您不会保存任何内容。您可以使用“按引用传递”(即传递root的地址,以便您可以实际更改它),或者仅依靠root是全局的事实并直接修改它。