function SearchMove ( init, inc, level : integer ) : integer;
{*** Find the first hole (empty location) at the given depth
in the binary tree spanned by a key ***}
label 999;
var i, inc1, j, k : integer;
begin
i := (init + inc*level) mod m;
if empty(r[i]) or deleted(r[i]) then SearchMove := i
else begin
for j:=level-1 downto 0 do begin
i := (init + inc*j) mod m;
inc1 := increment( r[i].k );
k := SearchMove( (i+inc1) mod m, inc1, level-j-1 );
if k>-1 then begin
{*** A hole was found, move forward ***}
r[k] := r[i];
SearchMove := i;
goto 999 {*** return ***}
end
end;
{*** Could not find hole ***}
SearchMove := -1;
end;
999:
end;
|