Tree 二叉树

Tree 二叉树,tree,pascal,freepascal,Tree,Pascal,Freepascal,我试图从一个整数文件中以上升形式对二叉树进行充电,但它不起作用 program trees; type fl = file of Integer ; ltree = ^puntTree ; puntTree = record val : Integer ; big : ltree ; low : ltree end ; procedure op

我试图从一个整数文件中以上升形式对二叉树进行充电,但它不起作用

program trees;

type 
        fl = file of Integer
    ;   ltree = ^puntTree
    ;   puntTree = record
                val : Integer
            ;   big : ltree
            ; low : ltree
        end
    ;

procedure openFile ( var iFile: fl; name: String; var error: Boolean );
    begin
        error := false;
        assign ( iFile, name );
        {$I-}
            reset ( iFile );
        {$I+}   
        if ( ioResult <> 0 ) then
            error := true;
    end;


procedure loadTree ( var tree: ltree; var iFile: fl; var principalNode: ltree; position: Integer );
    var val
                :Integer
        ;   node
                :ltree
        ;
    begin
        if ( tree = nil ) then
            begin
                seek ( iFile, position );
                read ( iFile, val );
                new ( tree );
                tree^.val := val;
                tree^.low := nil;
                tree^.big := nil;
            end;

        if not eof ( iFile ) then
            begin
                read ( iFile, val );

                node := principalNode;

                while ( node <> nil ) do
                    if ( node^.val < val ) then
                        node := node^.big
                    else
                        node := node^.low;

                cargartree ( node, iFile, principalNode, ( position + 1 ) );
            end;
    end;

procedure printTree ( tree: ltree );
    begin
        if ( tree <> nil ) then
            begin
                printTree ( tree^.low );
                writeln ( tree^.val, ' - ' );
                printTree ( tree^.big );
            end;
    end;

var 
        tree
    ,   principalNode
            :ltree
    ;   iFile
            :fl
    ;   fileName
            :String
    ;   error
            :Boolean
    ;

begin
    readln ( fileName );
    abrirfile ( iFile, fileName, error );
    if not error then
        loadTree ( tree, principalNode, iFile, 0 );
    printTree(principalNode);
end.
但当我打印树时,控制台仅显示:

1 - 
有办法解决吗?
谢谢

在尝试想象给出的代码应该做什么而不是它实际做什么之后,主要错误是您正在将'principalnode'传递给'printtree';你应该将“树”传递给这个过程。

你的代码风格是一门有趣的艺术,但是(至少对我来说)可读性很差。我在学习系统工程,我采用这种形式编写代码,因为当我们用钢笔和纸进行考试时,这是阅读代码的最佳方式(对我来说)。“cargartree”的定义在哪里?我认为,如果将树处理部分与文件处理部分分开,调试会容易得多——让程序的主要部分从文件中读取数字,然后将这些数字传递给树构建过程。LoadTree应该是一个递归过程。如果您正在调用
abrirfile
但声明
openFile
,并且调用
LoadTree
的参数顺序不正确,则这不能是原始代码。在第一次调用
openFile
时,您正在传递尚未初始化的指针(我不知道free pascal是否会自动将它们设置为
nil
,或者它们是否未定义)。
1 -