Ich versuche, das Löschen von Knoten in einem Binärbaum zu verstehen. Dies ist das Code-Snippet, das ich im Tutorial gefunden habe, das dasselbe erklärt.Wie lösche ich Elemente in einem Binärbaum in C?
Der Knoten sieht wie folgt aus:
struct node
{
int key_value;
struct node *left;
struct node *right;
};
Quelle: http://www.cprogramming.com/tutorial/c/lesson18.html
void destroy_tree(struct node *leaf)
{
if(leaf != 0)
{
destroy_tree(leaf->left);
destroy_tree(leaf->right);
free(leaf);
}
}
Mein Zweifel ist in Bezug auf die free(leaf)
Teil. Ich meine, der Autor behauptet, dass dies rekursiv alle Knoten löschen wird, die von der unteren linken beginnen. Aber ist nicht free(leaf)
nur den Speicher des Blattzeigers frei? Sind nicht alle Knoten noch verbunden? Wie erfolgt die Räumung?
Wie lösche ich Elemente in einem Binärbaum? Ones und Nullen auf einmal. –
Der Baum ist vollständig zerstört, daher müssen die Blätter nicht getrennt werden. Sie könnten sie trennen, aber es wäre nutzlos. Warum versuchst du es nicht einfach? –
Ich schlage vor, Sie schreiben ein kleines Bild davon auf Papier und versuchen dann, es mit diesem Algorithmus zu befreien, um einen Hang davon zu bekommen. Ich empfehle diese Methode für alles, was Bäume betrifft. –