【发布时间】:2012-12-12 16:50:30
【问题描述】:
您好,我正在学习帕斯卡并测试一些功能
我做了一个这样的递归插入过程。
如果节点存在,则比较两个键,如果不存在,则为新节点腾出空间。
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循环为真并执行这段代码 但在此之后,while 循环变为 false 并创建一个新节点。
if KEY < NODE^.KEY then
NODE:=NODE^.LEFT
else
NODE:=NODE^.RIGHT
最终没有节点连接,这个程序只是不断地创建新节点。
有什么我错过的吗?或者关于第二个代码的任何即兴创作?
在此先感谢:)
【问题讨论】:
标签: pointers recursion while-loop pascal