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 -