Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Fragen zu binären Bäumen in Delphi (https://www.delphipraxis.net/168277-fragen-zu-binaeren-baeumen-delphi.html)

lennart9319 12. Mai 2012 16:13

Fragen zu binären Bäumen in Delphi
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe am kommenden Dienstag meine mündliche Prüfung im Fach Informatik und die beiden Hauptthemen sind Binäre Bäume in Delphi und Automaten und Akzeptoren.
Um mich darauf vorzubereiten habe ich mir ein einfaches Delphiprogramm angeguckt, was wie ein Telefonbuch funktionieren soll (Ist von einem ehemaligen Schüler programmiert worden). Das meiste versteh ich auch, nur an 2 Stellen im Code, weiß ich nicht so ganz sicher, was er genau tut, viellleicht kann mir da einer helfen.
Es geht um die procedure max_in_links und die function baumbau. Was der Code im ganzen bewirkt, ist mir klar, nur eben nicht im einzelnen!

Und dann hab ich noch eine zweite Frage: Wie schreibt man die function inorder zur function postorder um?

(Zur Verständniss ist im Anhang der gesamte Code des Programms)

lennart9319



Delphi-Quellcode:
procedure TForm1.Button_ladenClick(Sender: TObject);
function baumbau(n: integer): pointer;
  var hilf1: pointer;
  begin if n=0 then baumbau:=nil
               else begin new(hilf1);
                          hilf1^.l:=baumbau(n div 2);
                          read(f,x); hilf1^.inside:=x;
                          hilf1^.r:=baumbau(n-1- n div 2);
                          baumbau:=hilf1
                    end
  end;
begin if OpenDialog1.Execute then System.Assign(f,OpenDialog1.FileName);
      if OpenDialog1.FileName<>''
        then begin reset(f);
                   read(f,x);
                   anz:=strtoint(x.nr);
                   root:=baumbau(anz);
             end
end;


procedure TForm1.Button_speichernClick(Sender: TObject);
procedure inorder(p: pointer);
  begin if p<> nil then begin inorder(p^.l);
                              x:=p^.inside;
                              write(f,x);
                              inorder(p^.r)
                        end
Delphi-Quellcode:
procedure TForm1.Button_entfernenClick(Sender: TObject);
  procedure max_in_links(var p,q: pointer);
  begin if p^.r<>nil
          then max_in_links(p^.r,q)
          else begin q^.inside:=p^.inside;
                     p:=p^.l;
               end
  end;
  procedure entfernen(var hilf1: pointer; suchname: string);
  begin if hilf1=nil
          then Edit2.Text:='existiert nicht'
          else if suchname<hilf1^.inside.name
                 then entfernen(hilf1^.l, suchname)
                 else if suchname>hilf1^.inside.name
                        then entfernen(hilf1^.r, suchname)
                        else if hilf1^.l=nil
                                then hilf1:=hilf1^.r
                                else if hilf1^.r=nil
                                       then hilf1:=hilf1^.l
                                       else max_in_links(hilf1^.l,hilf1)
  end;
begin
  entfernen(root, Edit1.text);
  if Edit2.Text<>'existiert nicht' then anz:=anz-1
end;

p80286 14. Mai 2012 09:34

AW: Fragen zu binären Bäumen in Delphi
 
Wo liegt denn Dein Problem?
Wenn ich das richtig verstanden habe, wird da eine Datei eingelesen, deren erster Eintrag die anzahl der Elemente vorgibt, was auch gleichzeitig die Verteilung innerhalb des Baumes steuert.

(dieses obskure f für die Eingabedatei ist ein schönes Beispiel für den überflüssigen Einsatz von globalen Variablen)

Gruß
k-H

lennart9319 14. Mai 2012 16:17

AW: Fragen zu binären Bäumen in Delphi
 
Danke für de Antwort, aber habe den Code mittlerweile verstanden. Es ging mir nur darum für die mündliche Prüfung genau beschreiben zu können, was der COde tut.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz