Ich habe eine binäre Suche Struktur, für die ich versuche, eine Einfügefunktion zu implementieren. Aber wenn ich den Code teste, sehe ich, dass überhaupt kein Element hinzugefügt wird, obwohl mir meine Logik gut erscheint. Ich habe das Gefühl, dass es eine C-Idiosynkrasie gibt, die ich vermisse.Binary Search Tree nicht Element hinzufügen
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);
}
}
Sie müssen einen Doppelzeiger (einen Zeiger auf einen Zeiger) verwenden, aber es ist tatsächlich einfacher, den Knoten als Funktionsergebnis in 'einfügen' zurückzugeben. –
Warum sollte ein Doppelzeiger notwendig sein? Und was ist mit dem aktuellen Code verhindert, dass Knoten hinzugefügt werden? –
[Eine von * vielen * Duplikaten für dieses Problem] (https://stackoverflow.com/questions/6349196/binary-search-tree-pointer-problem). – WhozCraig