我写了一个程序,创建一个二进制搜索树,在其中动态插入字符串并按顺序显示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);
}
任何人都知道如何解决它?
答案 0 :(得分:0)
您永远不会设置root
的值(除了NULL),因此您不会保存任何内容。您可以使用“按引用传递”(即传递root
的地址,以便您可以实际更改它),或者仅依靠root
是全局的事实并直接修改它。