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