嗨,我正在学习帕斯卡并测试一些函数
,我做了一个这样的递归插入过程。如果节点存在比较两个键,如果不存在,则为新节点腾出空间。
procedure INSERT (KEY : integer; var NODE : NODEPTR);
begin
if NODE = Nil then
begin
New (NODE);
NODE^.KEY := KEY;
NODE^.LEFT := Nil;
NODE^.RIGHT := Nil
end
else
if KEY < NODE^.KEY then
INSERT (KEY, NODE^.LEFT)
else
INSERT (KEY, NODE^.RIGHT)
end;
我想要做的是将递归函数更改为while循环。所以我做了这样的过程,
如果节点存在做while循环,直到节点为空。在while循环结束后,创建一个新节点
procedure INSERT (KEY : integer; var NODE : NODEPTR);
begin
while NODE <> nil do
begin
if KEY < NODE^.KEY then
NODE:=NODE^.LEFT
else
NODE:=NODE^.RIGHT
end;
New (NODE);
NODE^.KEY := KEY;
NODE^.LEFT := Nil;
NODE^.RIGHT := Nil
end;
当第一个节点是根节点时,while 循环为 true 并执行此代码,但此后,while 循环变为 false 并创建一个新节点。
if KEY < NODE^.KEY then
NODE:=NODE^.LEFT
else
NODE:=NODE^.RIGHT
最终没有节点连接,这个程序只是不断地创建新节点。
有什么我错过的吗?或者关于第二个代码的任何即兴创作?提前致谢 :)