Binärbaum komplett löschen
-
Hallo,
ich habe mit c++ angefangen und dazu folgendes probiert:ich habe einen Binärbaum aufgebaut, der folgende Struktur hat:
struct node{ char content; node* left; node* right; //node* parent; };
Die Methode zum Löschen des vollständigen Baums sieht folgendermaßen aus:
void deleteNode(node *node){ if(node == NULL)return; if(node->left==NULL && node->right==NULL){ delete node; node=NULL; return; } if(node->left !=NULL) deleteNode(node->left); if(node->right !=NULL) deleteNode(node->right); }
Wenn ich deleteNode(root) aufrufe, wobei root ein Pointer ist ( node* root )mit dem Anfangsknoten, dann ist am Ende jedoch mein root-Knoten nicht NULL sondern, da steht immer noch was drinne.
Was mache ich falsch?Vielen Dank
-
Du übergibst den Parameter-Zeiger by value, d.h. die Funktion arbeitet mit einer Kopie.
-
ok,
wir hatten noch referenzübergaben mit
void funktion(int &num){};sowas scheint aber nicht zu gehen:
void deleteNode(node& *node){};Da kommt folgende Fehlermeldung:
error: cannot declare pointer to `struct node&'
wieso geht das net?wie mache ich das richtig? Mit nem pointerpointer`?
so: void deleteNode(node** anode){}?
wie ruft man dann die deleteNode funktion auf? ich habe ja keinen pointerpointer?
Ich habe es jetzt nochmal zu probiert:void deleteNode(node **node){ if(*node == NULL)return; if((*node)->left==NULL && (*node)->right==NULL){ delete *node; *node=NULL; return; } if((*node)->left !=NULL) deleteNode(&((*node)->left)); if((*node)->right !=NULL) deleteNode(&((*node)->right)); }
Es wird immer noch nicht richtig gelöscht :S
-
invoices schrieb:
sowas scheint aber nicht zu gehen:
void deleteNode(node& *node){};Andersrum:
void deleteNode(node*& node)
Der Stern gehört zum Typ.
-
ok danke,
leider wird mein baum immer noch nicht richtig gelöscht.
stimmt vielleicht was sonst noch nicht?void deleteNode(node*&node){ if(node == NULL)return; if(node->left==NULL && node->right==NULL){ delete node; node=NULL; return; } if(node->left !=NULL) deleteNode(node->left); if(node->right !=NULL) deleteNode(node->right); }
-
Nur zur Info, das ist das falsche Forum. Es gehört ins C++ Forum.
-
ok tut mir leid,vielleicht kann das jemand mal verschieben.
aber das problem hat sich nun erledigt.
die Reihenfolge der IF-Abfrage hat nicht gestimmt.