我一直停留在这个简单的二叉搜索树上,因为我的主要问题是函数 bst_get() 中的 (BST * bst) 为 NULL。
typedef struct {
char *key;
void *value;
} KVP;
typedef struct bst {
struct bst *left;
struct bst *right;
KVP kvp;
} BST;
此插入函数从输入文件中获取参数并进行相应排序
BST *bst_insert(BST *bst, char*key, void *value){
if(bst==NULL){
BST * tempBST = (BST * )malloc(sizeof(BST));
//strcpy(tempBST->kvp.key , key);
tempBST->kvp.key = key;
tempBST->kvp.value = value;
tempBST->left = NULL;
tempBST->right = NULL;
puts(key);
return tempBST;
}else
//if(strcmp(key , bst->kvp.key) > 0){ // i tried to compare strings but it failed
if(key > bst->kvp.key && bst != NULL){
bst->right = bst_insert(bst->right , key , value);
return bst;
}
else
if(key < bst->kvp.key){
bst->left = bst_insert(bst->left , key, value);
return bst;
}
}
以及何时将该 BST 与密钥(来自另一个文件)进行比较,如下所示
KVP *bst_get(BST *bst , char *key)
if(bst!=NULL){
if(key==bst->kvp.key){
return &bst->kvp;
}
else if (key > bst->kvp.key) {
return bst_get(bst->right , key);
} else if (key < bst->kvp.key){
return bst_get(bst->left , key);
}
}else{
printf("BST IS EMPTY!\n");
}
}
打印出“BST IS EMPTY”语句。我不知道我的 BST 发生了什么,因为我提到了其他类似的问题,似乎我在这里错过了一些重要的问题,并希望得到一些帮助。
感谢您的时间