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