【发布时间】:2022-11-05 02:05:43
【问题描述】:
当我在我的头结构中时如何使用指针将新节点插入二叉树:
typedef struct bst_node {
char key;
int value;
struct bst_node *left;
struct bst_node *right;
} bst_node_t;
在 void 参数中使用双指针时如何分配内存?当我尝试在测试中运行它时,我得到了段错误
void bst_insert(bst_node_t **tree, char key, int value) {
if(tree == NULL){
tree = malloc(sizeof(struct bst_node));
(*tree)->key = key;
(*tree)->value = value;
(*tree)->right = NULL;
(*tree)->left =NULL;
}
else if(key == (*tree)->key){
(*tree)->value = value;
}
else if((*tree)->key > key){
bst_insert(&(*tree)->left, key, value);
}else{
bst_insert(&(*tree)->right, key, value);
}
}
【问题讨论】:
-
if (tree == NULL){ tree = ...是错误的。应该是if (*tree == NULL) { *tree = ... -
是的,但最好同时检查
tree和*tree,更优选IMO 使用单个*并返回一个函数值而不是void。 -
如果您首先将双指针转换为单指针,则正确编写代码会容易得多,例如
bst_node_t *node = *tree;。然后所有的代码都可以用node而不是(*tree)编写,使代码更容易阅读和理解。您必须记住的一件事是*tree = node;行,它更新了tree指向的指针。在给定的代码中,只需要在第一个if子句末尾的一个地方。
标签: c malloc binary-tree