unit Dokorene; interface type keytype = integer; part = (left,right); tdir = array [part] of part; ptree = ^tree; tree = record key : keytype; son : array [part] of ptree; end; const oth : tdir = (right,left); function vloz(X:keytype; T:ptree):ptree; implementation function ins(X:keytype; T:ptree; D:part): ptree; { vklada prvek s klicem X do korene stromu T, stary koren pripojen ve smeru D } var P,Q : ptree; othD : part; begin othD:= oth[D]; new(P); P^.key:=X; P^.son[D]:=T; Q:= vloz(X,T^.son[othD]); P^.son[othD]:= Q^.son[othD]; T^.son[othD]:= Q^.son[D]; dispose(Q); ins:= P; end; function vloz(X:keytype; T:ptree):ptree; begin if T=nil then begin new(T); with T^ do begin key:=X; son[left]:=nil; son[right]:=nil; end end else if T^.key=X then vloz:=T else if T^.key>X then vloz:=ins(X,T,right) else vloz:=ins(X,T,left); end; end.