Binärbaum komplett löschen

15/01/2009 - 20:48 von qotsa | Report spam
Hallo,

Nachdem ich nun Stunden damit verbracht habe, die Funktion zum Löschen
eines Knoten zum Laufen zu bringen, stehe ich nun vor einem neuen
Problem. Wenn ich den kompletten Binàrbaum löschen will, steht am Ende
der Zeiger auf das Wurzelelement nicht auf NULL, obwohl er das
eigentlich tun sollte. Hier mal der relevante Code:

typedef struct node{

int key;
char *data;
struct node *left;
struct node *right;
}node_t;

int free_tree(node_t *root){

if(!root)return 0; //Baum ist "leer"
if(root->left)free_tree(root->left);
if(root->right)free_tree(root->right);
free(root->data);
free(root);
root = NULL;
return 1;
}

Nachdem free_tree() durchgelaufen ist, ist zwar scheinbar der Speicher
freigegeben, aber das Wurzelelement steht noch nicht auf NULL, somit
können andere Funktionen wie print_tree nicht erkennen, dass der Baum
"leer" ist.

Wo liegt mein Fehler?

Danke im Voraus

Michael
 

Lesen sie die antworten

#1 Mathias A. Becher
15/01/2009 - 21:15 | Warnen spam
Hash: SHA1

Hallo qotsa

qotsa schrieb:
root = NULL;



Hier setzt du eine lokale Kopie des Zeigers auf das Wurzelelement gleich
NULL. Deine Funktion sollte mit einem Zeiger auf das Wurzelelement
arbeiten, also so etwas wie

int free_tree(node_t** root);

Dann kannst du mittels

*root = NULL;

das Wurzelelement auf NULL setzen.

Danke im Voraus

Michael



Nichts zu danken

Mathias

Ähnliche fragen