Entwickler-Ecke
Algorithmen, Optimierung und Assembler - binärer suchbaum: blätter löschen
Zwecklos - Mi 07.09.05 21:27
Titel: binärer suchbaum: blätter löschen
hallo erstma!
ich kenne mich hier noch nicht so wirklich aus und weiß deshalb nicht ob ich das richtige forum erwischt habe :)
ich habe einen binären suchbaum und möchte nun eine (rekursive?) prozedur schreiben, die mir alle blätter des baumes löscht...
irgendwie komme ich bei der sache aber auf keinen grünen zweig :mrgreen:
hat jemand vielleicht so ne prozedur parat oder kann mir nen heißen tipp geben?
vielen dank im voraus, mfg Zwecklos
uall@ogc - Mi 07.09.05 21:32
1) musst du schon sagen wie der suchbaum aufgebaut ist, d.h. wie die records aussehen
2) musst du uns zeigen das du schon mal was versucht hast, hier wird dir keiner etwas fertiges programmieren
delfiphan - Mi 07.09.05 21:32
Du musst nur eine Prozedur "Loeschen" implementieren, welche zuerst die Kinderobjekte löscht, dann sich selbst. Danach musst du nur den Root löschen, dann geht alles von alleine.
Zwecklos - Mi 07.09.05 21:43
@ uall@ogc
Ersten:
Delphi-Quelltext
1: 2: 3: 4: 5:
| type Pknoten = ^tbaum; tbaum = Record info: integer; left, right: Pknoten; END; |
Zweitens:
Ich habe noch nicht viel und hab auch keine ahnung ob ich annähernd auf dem richtigen weg bin, aber bitte: :)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure hexler(B :Pknoten); begin if B <> Nil then begin if (B^.left = Nil) and (B^.right = Nil) then begin dispose(B); end else dispose(B); end; end; |
@delfiphan
ich möchte ja nur die "Kinder", also die Knoten ohne nachfolger löschen, welche ich als "Blätter" kennengelernt habe :)
Zwecklos - Mi 07.09.05 21:44
also mein ansatz ist irgendwie voll schmarn, aber ich weiß nicht wie ich zuerst die kinder auf nachfolger überprüfen soll, dann die kinder löschen und dann die vorgänger der kinder auf nil setzen kann
Zwecklos - Mi 07.09.05 21:46
sorry für das mehrfachposting, aber den ansatz kuckt ihr euch am besten gar nicht an, da hab ich grade halb was verändert gehabt und dann ging alles durcheinander :)
sorry ^^
delfiphan - Mi 07.09.05 21:59
Wenn du nur die Elemente löschen willst, die keine Nachkommen haben, funktioniert das ähnlich...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure LoescheBlaetterVonBaum(var B: Pknoten); begin if (B^.left = nil) and (B^.right = nil) then begin Dispose(B); B := nil; end else begin if B^.left <> nil then LoescheBlaetterVonBaum(B^.left); if B^.right <> nil then LoescheBlaetterVonBaum(B^.right); end; end; |
Zwecklos - Mi 07.09.05 22:05
Vielen Dank Delfiphan für die schnelle Hilfe! Spitze! :wave:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!