Я делаю Бинарное дерево - это C. Я знаю, как создавать Бинарные деревья, здесь не проблема.
Я использовал указатели void для root и все элементы, которые будут добавлены в дерево.
Когда двоичное дерево пусто (корень указывает на NULL), я просто делал корневую точку к элементу, который станет первым элементом дерева. Но root не получил адрес элемента, на который он должен указывать. Это было просто повторное назначение.
Как я упоминал выше, я пытался просто переназначить указатели void, чтобы назначить новый адрес для корня.
Но когда я назначал отдельные значения элемента для корня, все, казалось, работало идеально.
Представляет все элементы для двоичного дерева.
struct node {
void * key;
void * value;
struct node * left;
struct node * right;
};
Первый подход: простое переназначение, которое не удается
void map_tree_put(struct node * root, struct node * ele){
if(root==NULL) {
root = ele;
}
else {
/* some other code*/
}
}
Второй подход: индивидуальное присвоение значения работает отлично
void map_tree_put(struct node * root, struct node * ele){
if(root==NULL) {
root->key = ele.key;
root->value = ele.value;
root->left = NULL;
root->right = NULL;
}
else {
/* some other code*/
}
}
Тестовый код
int main() {
struct node * r = NULL;
int key = 10;
int value = 100;
struct node ele = {&key, &value, NULL, NULL};
map_tree_put(r, &ele);
printf("%d\n", *(int*)r->key); /* I get segmentation fault over here with the first approach but work fine with the second approach */
return 0;
}