c - 二叉搜索树不添加元素

标签 c binary-search-tree

我有一个二叉搜索树,我正在尝试为其实现插入功能。但是,当我测试代码时,我发现根本没有添加任何元素,即使我的逻辑对我来说似乎没问题。我觉得我缺少一些 C 特质。

struct tree_element {
    int data;
    struct tree_element* left;
    struct tree_element* right;
};

typedef struct tree_element node;

void init(node* root){
    root->left = NULL;
    root->right = NULL;
    root->data = 0;
}

void insert(node* root, int val){
    if (root == NULL){
        root = (node*)(malloc(sizeof(node)));
        init(root);
        root->data = val;
        printf("added %i\n", val);
        return;
    }

    if (val > root->data){
        insert(root->right, val);
    }
    else {
        insert(root->left, val);
    }
}

最佳答案

您更改函数内的 root 值。 但是,从调用函数的角度来看,没有任何改变。

这可能有效:

void insert(node** root, int val){
    if (*root == NULL){
        *root = (node*)(malloc(sizeof(node)));
        init(*root);
        (*root)->data = val;
        printf("added %i\n", val);
        return;
    }
    if (val > (*root)->data){
        insert(&((*root)->right), val);
    }
    else {
        insert(&((*root)->left), val);
    }
}

基本概念是 - 当您将指针传递给方法时,该方法可以更改指针指向的数据,但不能更改指针本身。

关于c - 二叉搜索树不添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38043915/

相关文章:

algorithm - 证明在二叉树中重复调用 successor() 的效率?

c++ - 二叉搜索树中的插入错误

algorithm - 删除二叉树中节点的方法

c++ - 无法显示二进制搜索树C++

c - 编译器在生成其目标代码时是否必须经过汇编级别?

c - 如何使用 C 程序直播视频。 HTTP 回复应该是什么?如果可能,如何使用分块编码?

c - accept 语句在两个看起来相似的不同代码中返回两个不同的值?

Java/C/C++/C#/PHP 到 Pascal 转换器?

C++ 如何生成 10,000 个唯一的随机整数以存储在 BST 中?

c - 在C和WINAPI中模拟按键被按下