Einzelnen Beitrag anzeigen

lennart9319

Registriert seit: 12. Mai 2012
2 Beiträge
 
#1

Fragen zu binären Bäumen in Delphi

  Alt 12. Mai 2012, 17:13
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 nichtthen anz:=anz-1
end;
Angehängte Dateien
Dateityp: txt Baum Code.txt (6,0 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat