Foros del Web » Programación para mayores de 30 ;) » Programación General »

Lista de un arbol (ADA)

Estas en el tema de Lista de un arbol (ADA) en el foro de Programación General en Foros del Web. nas, Tengo q hacer una funcion q me devuelva una lista ordenada(de menor a mayor) de los nodos q contiene un arbol binario de buskeda. ...
  #1 (permalink)  
Antiguo 14/06/2005, 08:57
 
Fecha de Ingreso: junio-2005
Mensajes: 2
Antigüedad: 19 años, 5 meses
Puntos: 0
Lista de un arbol (ADA)

nas, Tengo q hacer una funcion q me devuelva una lista ordenada(de menor a mayor) de los nodos q contiene un arbol binario de buskeda.
La tengo que hacer recursivamente pero como es una funcion pues no me sale pq no puedo poner algo como:

return listar(c.derecho,p,n);
return listar(c.izkierdo,p,n);
si alguien sabe lo ponga aki (es en ADA) thx
socorroo
  #2 (permalink)  
Antiguo 14/06/2005, 10:45
 
Fecha de Ingreso: diciembre-2004
Mensajes: 21
Antigüedad: 19 años, 11 meses
Puntos: 0
Has tenido suerte que hice un examen hace poco de esto... Voy a intentarlo, seguro que hay más formas y eso, pero así lo haría yo. Y como no me has dicho si te pasan sólo el arbol o el arbol y la lista... en fin....
Primero te pongo todos los tipos que voy a usar.... después te creo dos procedimientos dentro de la función, uno que te mete en la lista el dato, y otro que recorre el arbol de forma ordenada.

Código:
type TNodo;
type TPuntero is access TNodo;
type TNodo is
   record
      Dato       : Integer;
      Siguiente : TPuntero := null;
   end record;
type TLista is
   record
      Primero : TPuntero := null;
   end record;
type TNodo_Arbol;
type TPuntero_Arbol is access TNodo_Arbol;
type TNodo_Arbol is
   record
      Dato : Integer;
      Izquierda : TPuntero_Arbol := null;
      Derecha  : TPuntero_Arbol := null;
   end record;
type TArbol is
   record
      Raiz : TPuntero_Arbol := null;
   end record;


function De_Arbol_A_Lista (Arbol : in TArbol) return TLista is
   Lista : TLista;

   procedure Meter_En_Lista (Dato : in Integer) is
      Actual : TPuntero := Lista.Primero;
   begin
      if Actual = null then                      -- La lista esta vacia
         Lista.Primero := new TNodo;
         Lista.Primero.Dato := Dato;
         return;
      end if;
      while Actual.Siguiente /= null loop    -- Vamos al final de la lista y lo 
         Actual := Actual.Siguiente;          -- colocamos
      end loop;
      Actual.Siguiente := new TNodo;
      Actual.Siguiente.Dato := Dato;

   end Meter_En_Lista;


   procedure Recorrer_En_Orden (Puntero : in TPuntero_Arbol) is

   begin
      if Puntero = null then 
         return;
      end if;
      Recorrer_En_Orden (Puntero.Izquierda);
      Meter_En_Lista (Puntero.Dato);
      Recorrer_En_Orden (Puntero.Derecha);
   end Recorrer_En_Orden;

begin
   if Arbol.Raiz = null then
      Lista.Primero := null;
   end;
   Recorrer_En_Orden (Arbol.Raiz);
   return Lista;
end De_Arbol_A_Lista;
P.D.: Lo he tabulado todo para dejarlo ordenado, pero ha pasado de mi.
P.D.2.: Lo he metido todo dentro de un código y ahora si sale tabulado.

Última edición por ferruje; 14/06/2005 a las 10:53
  #3 (permalink)  
Antiguo 14/06/2005, 12:09
 
Fecha de Ingreso: junio-2005
Mensajes: 2
Antigüedad: 19 años, 5 meses
Puntos: 0
DIOOOOOOSS eres mi idolo tio!!!!!! GRACIAS de verdad yuoooooosss llevaba tol dia comiendome la cabeza con este problema gracias a tu solucion(aunk la tuve q modificar un poco) me sale perfecto. Xaxo te debo un almuerzo o lo q kieras.
Aki tienes un amigo para siempre xDD
  #4 (permalink)  
Antiguo 14/06/2005, 12:31
 
Fecha de Ingreso: diciembre-2004
Mensajes: 21
Antigüedad: 19 años, 11 meses
Puntos: 0
JAJAJAJAJA. De nada. Era normal que algo estuviera mal, porque lo hice a pelo ahí, sin compilar ni naa... en fin, me alegro que te haya servido.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:17.