二进制搜索树插入不与根关联

时间:2014-04-13 04:33:01

标签: c binary-search-tree

我正在制作一个基本的二叉搜索树及其操作。

为什么我的插页没有工作?

它没有接收值,我从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");
        }
    }
}

1 个答案:

答案 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的评论