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;