我正在制作一个基本的二叉搜索树及其操作。
为什么我的插页没有工作?
它没有接收值,我从main发送的根不会与我插入的值相关联。
void insert(struct bst* root, int val)
{
if (root == NULL)
{
struct bst* temp = malloc(sizeof(struct bst));
temp->val = val;
temp->left = NULL;
temp->right = NULL;
root = temp;
}
else
{
if (root->val > val)
{
insert(root->left,val);
}
else if (root->val < val)
{
insert(root->right,val);
}
else
{
printf("alredy exits");
}
}
}
答案 0 :(得分:1)
如果希望在函数返回后知道root
的值,则需要将原型更改为
void insert(struct bst** root, int val)
并在调用时传递root
的地址。然后你改变了行
root = temp;
到
*root = temp;
当然您需要在代码中更改root
的其他访问权限。可能最好调用函数root_p
的参数(对于指向root的指针)然后取消引用它(一旦你确定它不是NULL)
root = *root_p;
这使整个函数像这样:
void insert(struct bst **root_p, int val)
{
if (*root_p == NULL)
{
struct bst* temp = malloc(sizeof(struct bst));
temp->val = val;
temp->left = NULL;
temp->right = NULL;
*root_p = temp;
}
else
{
root = *root_p;
if (root->val > val)
{
insert(&(root->left),val);
}
else if (root->val < val)
{
insert(&(root->right),val);
}
else
{
printf("already exists"); // <<<<< fixed typo here
}
}
}
在调用函数中你会有
struct bst *root;
for(int ii=0; ii<5; ii++) insert(&root, 1); // for example
编辑关注@ whozcraig的评论