Autor Beitrag
Zwecklos
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 07.09.05 21:27 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: 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

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 07.09.05 21:43 
@ uall@ogc

Ersten:
ausblenden 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: :)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure hexler(B :Pknoten);
begin
if B <> Nil then begin
  if (B^.left = Niland (B^.right = Nilthen 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mi 07.09.05 21:59 
Wenn du nur die Elemente löschen willst, die keine Nachkommen haben, funktioniert das ähnlich...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure LoescheBlaetterVonBaum(var B: Pknoten);
begin
  if (B^.left = niland (B^.right = nilthen
  begin // Hat keine Nachkommen => sich selbst löschen
   Dispose(B);
   B := nil;
  end else
  begin // Hat Nachkommen => Befehl weitergeben
   if B^.left <> nil then LoescheBlaetterVonBaum(B^.left);
   if B^.right <> nil then LoescheBlaetterVonBaum(B^.right);
  end;
end;
Zwecklos Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 07.09.05 22:05 
Vielen Dank Delfiphan für die schnelle Hilfe! Spitze! :wave: