Thema: Delphi Baum: Pfad ausgeben

Einzelnen Beitrag anzeigen

P_P

Registriert seit: 5. Apr 2010
7 Beiträge
 
#1

Baum: Pfad ausgeben

  Alt 5. Apr 2010, 18:14
Hallo Forum!
Ich bin neu hier und habe auch gleich ein Problem...
Ich habe wie folgt einen Baum deklariert:
Delphi-Quellcode:
TYPE TPtr = ^TNode;

TNode = RECORD

      i: integer;

      c: string[2];

      left, right: TPtr;

END;
Desweiteren habe ich einen Typ TNodesArray deklariert:
TNodesArray = ARRAY OF TNode; Dann baue ich aus einem solchen Array einen Baum:

Delphi-Quellcode:
PROCEDURE HuffTreeBauen(var BlaArray: TNodesArray; var root: TNode);
VAR node, node2: TPtr;

    hs: string[2];

    i: integer;

BEGIN

  Sort(BlaArray);

   WHILE length(BlaArray) > 1 DO

   BEGIN

      new(node);

      node^ := BlaArray[0];

                new(node2);

                node2^ := BlaArray[1];

                BlaArray[0].i := BlaArray[0].i + BlaArray[1].i;

                BlaArray[0].left := node;

                BlaArray[1].right := node2;

                Test(BlaArray[0], 1);

      FOR i := 1 TO length(BlaArray) - 2 DO

         BlaArray[i] := BlaArray[i + 1];

      SetLength(BlaArray, (length(BlaArray) - 1));

      Sort(BlaArray);

   END;

   root := BlaArray[0];

END;
... um dann den Pfad zu einem Zeichen als Folge von 0en und 1en ausgeben zu können:
Delphi-Quellcode:
FUNCTION Pfad(root: TPtr; x: char): string;
BEGIN
   found := FALSE;
   IF root^.c[1] <> x THEN
   BEGIN
        IF ((root^.left <> NIL)) THEN
                  BEGIN
                    result := '0' + Pfad(root^.left, x);
                    IF ((NOT found){  AND (root^.right <> NIL)}) THEN
                       result := '1' + Pfad(root^.right, x);
      END;
  END
  ELSE
  BEGIN
      result := '';
      found := TRUE;
  END;
END;
Und hier kommt mein Problem:
Wenn ich den auskommentierten Teil in der letzten Funktion weglasse, krieg ich ne Access Violation, wenn der Teil als Bedingung dabeibleibt, wird die Anweisung nie ausgeführt...
Ich bekomme immer nur '00' oder '000' oder dergleichen raus...

Hoffentlich kann mir hier jemand helfen!

Liebe Grüße,
Peter
  Mit Zitat antworten Zitat