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;