Type
  ptrnodo=^nodo;
  nodo=record
    info:trotulo;
    Hijo,sig:ptrnodo;
    end;
 
  TRIE=ptrNodo;
 
 
Procedure CrearNodo(var A:PtrNodo; x:trotulo);
Begin
     New(A); A^.hijo:=nil; A^.sig:=nil; AsignarRotulo(x, A^.info);
end;
{-------------------------------------------------------------------------------------------}
Procedure AgregarClave(var A:Trie; X:trotulo);
var
I:integer; T,ant:PtrNodo;
Begin
  I:=1; IF A=nil then New(A);
                t:=a^.hijo; 
{ ACA! mi pregunta es: En t que se "pone" la ubicacion de a^.hijo (que puede ser NIL o no) o simplemente un puntero NIL (dado el caso), que no tiene nada que ver con el A?
Si sigen leyendo el codigo un poco mas, se van a dar cuenta mejor de lo que pregunto }
 
 
  While (I<=Length(X)) do
  Begin
    While (T<>nil) and (IgualRotulo(T^.info, X[I])) do
    Begin
      Ant:=T;
      T:=T^.hijo;
      Inc(I);
    end;
    If T=nil then CrearNodo(T, X[I]) else
    Begin
      While (T<>nil) and (MenorRotulo(T^.info, X[I])) do
      Begin
        ant:=T;
        T:=T^.sig;
      end;
      If t=nil then CrearNodo(T, X[I]) else
        if Not IgualRotulo(T^.info, x[I]) then
        Begin
          CrearNodo(Ant^.sig, x[I]);
          Ant^.sig^.sig:=T;
          T:=ant^.sig;
        end;
    end;
     T:=T^.hijo; Inc(I);
  end;
        AsignarRotulo(AsignarRotuloNulo, T^.info);
end;