Buenas, tengo un problema con una función. Esta función consiste en buscar el sucesor simetrico de un arbol binario de busqueda al extraer un elemento que es de grado dos. y el problema es que no se me ocurre como adoptar el hijo derecho del elemento a extraer, ya que dentro del hijo derecho del elemento a extraer se encuentra su sucesor. Gracias de antemano.
--------------------------------------------------------------
-- El sucesor de un nodo de grado 2 es el primer nodo hacia --
-- la izquierda, a partir del hijo derecho, que no tenga --
-- hijo izquierdo --
-- El sucesor adopta a los hijos del nodo a extraer y el --
-- hijo derecho del sucesor es adoptado por el padre del --
-- sucesor (salvo que el sucesor sea el hijo derecho del --
-- nodo a extraer) --
--------------------------------------------------------------
function Sucesor_Simetrico(A: Arbol_Bin_Bus) return Arbol_Bin_Bus is
function Min (A : Arbol_Bin_Bus) return Arbol_Bin_Bus is
begin
if A.Hijos (1) = null then
return A;
else
return Min (A.Hijos (1));
end if;
end Min;
S : Arbol_Bin_Bus;
begin
S := Min (A.Hijos (2));
S.Hijos (1) := A.Hijos (1);
return S;
end Sucesor_Simetrico;