Einzelnen Beitrag anzeigen

MPeters

Registriert seit: 20. Nov 2022
9 Beiträge
 
#1

Freepascal AVLTree, Binären Baum allgemein verstehen?

  Alt 4. Mär 2023, 19:16
Hallo,

Ich habe folgendes Codestück:

Delphi-Quellcode:
type
  TMyData = class
  public
    Filename: string;
    Content: string;
  end;

function CompareMyData(Data1, Data2: Pointer): integer;
begin
  Result:=CompareFilenames(TMyData(Data1).Filename,TMyData(Data2).Filename);
end;

var
  tree: TAVLTree;
  myData1: TMyData;
  myData2: TMyData;
  MyData3: TMyData;
  MyData4: TMyData;
  MyData5: TMyData;
  MyData6: TMyData;
  tree: TAVLTree;
  node1: TAVLTreeNode;
  node2: TAVLTreeNode;
  node3: TAVLTreeNode;
  node4: TAVLTreeNode;
  node5: TAVLTreeNode;
  node6: TAVLTreeNode;

  root: TAVLTreeNode;

  constructor TmyApp.create;
  begin

    tree := TAVLTree.Create(@CompareMyData);
    root := nil;
    node1 := TAVLTreeNode.Create;
    node1.Parent := root;
    myData1 := TMyData.Create;
    myData1.Content := 'Dateninhalt'; //sei jetzt mal die Wurzel
    node1.Data := myData1;
    node1.Left := nil;
    node1.right:= nil;
    tree.Add(node1);

    node2 := TAVLTreeNode.Create;
    myData2 := TMyData.Create;
    myData2.Content := 'Komponente'; //könnte ebenso Wurzel sein
    node2.Data:=myData2; //wie Standard in der Komponentenpalette
    node1.Right := node2;
    node1.Left := nil;
    node2.Parent := node1;
    tree.Add(node2);

    node3 := TAVLTreeNode.Create;
    MyData3 := TMyData.Create;
    MyData3.Content:='Formular'; //könnte Subknoten für Komponente sein
    node3.Data := myData3; //hier zum Beispiel ein Formular
    node2.right := node3;
    node2.left := nil;
    node3.Parent := node2;
    tree.Add(node3);

    node4 := TAVLTreeNode.Create;
    MyData4 := TMyData.Create;
    MyData4.Content:='ToolBar'; //oder eine ToolBar
    node4.Data := myData4;
    node3.Right := node4;
    node3.Left := nil;
    node4.Parent := node3;
    tree.Add(node4);

    node5 := TAVLTreeNode.Create;
    MyData5 := TMyData.Create;
    myData5.Content := 'Directories'; //Das wäre dann ein Hauptverzeichnis
    node5.Data := myData5;
    node4.Left := node5;
    node4.Right := nil;
    node5.Parent := node4;
    tree.Add(node5);

    node6 := TAVLTreeNode.Create;
    MyData6 := TMyData.Create;
    myData6.Content := 'Alternativen'; //und hier irgendein Unterverzeichnis
    node6.Data := myData6;
    node5.Right := node6;
    node5.left := nil;
    node6.Parent := node5;
    tree.Add(node6);
Ich will hier Daten in einer Baumstruktur ablegen und suche eine allegemeine Vorgehensweise. Wie war das gleich noch mal mit dem binären Baum?

Wo gibt es dazu verständliche Doku?

Irgendwas mache ich hier noch verkehrt.

Wie würde der Baum für die Komponentenpalette aussehen und wie für einen Datei Verzeichnisbaum?

Ich muss ja dann einerseits den Baum korrekt aufbauen und dann auch korrekt anzeigen.
Dazu muss ich ja die Konten auch wieder finden.

Geändert von MPeters ( 4. Mär 2023 um 19:22 Uhr)
  Mit Zitat antworten Zitat