     function merge ( a, b : tree ) : tree;
     var     temp : tree;
     begin
     if a=nil then merge := b
     else if b=nil then merge := a
     else begin
          if a^.k < b^.k then begin
               temp := a;   a := b;   b := temp  end;
          a^.right := merge( a^.right, b );
          if a^.left <> nil then
               if a^.left^.k < a^.right^.k then begin
                    temp := a^.right;
                    a^.right := a^.left;
                    a^.left := temp
                    end
          end
     end;
