こんにちは、私はパスカルを学んでおり、いくつかの機能
をテストしています。このような再帰的な挿入手順を作成しました。ノードが存在する場合は 2 つのキーを比較し、存在しない場合は新しいノード用のスペースを作ります。
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-loopに変更することです。
ノードが存在する場合は、ノードが空になるまで 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
最終的にノード接続がなくなり、このプログラムは新しいノードを作成し続けます。
私が逃したものはありますか?または2番目のコードについての即興?前もって感謝します :)