Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-02-2006
adpa adpa is offline
Miembro
 
Registrado: dic 2005
Posts: 22
Poder: 0
adpa Va por buen camino
Problemas con Arboles.

Hola:

Estoy intentando resolver unos problemas de arboles.

1- Función para recorrer un arbol binario por niveles.

2- Función que devuelva la profundidad de un arbol.

3-Function que devuelva los nodos hoja.
Código Delphi [-]
function nodosHoja(A:AB)
BEGIN
     IF a=nil then
        nodosHoja:=0
     ELSE
         IF ( ((A^.hijoIzq = NIL) AND (A^.hijoDer = NIL)) then
              Nodoshoja:=1
         ELSE
              NodosHoja:=nodosHoja(A^.hijoDer)+NodosHoja(A^.hijoIzq);
 
END

4 - Procedimiento que copie un AB
Código Delphi [-]
Procedure copia(A,AC:ab)
begin
     if (a <> nil) then
        begin
            new(ac);
            datos(A^.info,hoja);
            insertar(ac,hoja);
            copia(A^.hijoDer,ac);
            copia(A^.hijoIzq,ac);
        end;
end;

5 - Procedimiento que imprima los nodos del hoja de un nodo binario por niveles, mostrando un rotulo que indique el nivel que se imprimy haciendo un salto de linea cada vez que se cambie de nivel.

6 - Escribir un procedimiento en pascal, que dado un árbol binario de busqueda de enteros, cree una lista enlazada con los nodos del árbol ordenados descendentemente según el valor de enteros almacenados en los nodos.

Si me podeis indicar como tengo que resolver los siguientes problemas.
Gracias.

Última edición por adpa fecha: 05-02-2006 a las 15:08:09.
Responder Con Cita
  #2  
Antiguo 06-02-2006
reina reina is offline
Miembro
 
Registrado: ago 2005
Ubicación: Capital Federal-La Plata (Bs As)
Posts: 147
Poder: 19
reina Va por buen camino
Holas! bueno..con respecto a:
*el recorrido del arbol para formar una lista en forma descendente..deberias tener el arbol binario ordenado..los items del arbol deberian haberse insertado
ordenadamente..despues podrias recorrer el arbol INORDEN(descendente) y de cada visita mandas a un proceso insertar lista donde cada nodo que traigas lo vayas poniendo al final de la lista..

Código Delphi [-]
procedure recorrer_inorden(A:arbolBin );
begin
     if A <> nil ) then
     begin  
           recorrer_inorden(A^.der);
           insertarlista(A^.nodo);
           recorrer_inorden(A^.izq);
     end;
end;
..bueno algo asi..ja

*lo de los niveles..seria como un recorrido en amplitud creo.. consiste en encolar (si no están vacíos) los subárboles izquierdo y derecho del nodo extraido de la cola, y seguir desencolando y encolando hasta que la cola esté vacía. Es una idea nomas..es iterativo no recursivo..

Código Delphi [-]
if (A <> nil) begin    
    CrearCola(cola);
    encolar(cola, A);
    while not(colaVacia(cola))begin
         desencolar(cola, aux);
         imprimir(aux);
         if (aux^.izq <> nil) encolar(cola, aux^.izq);
         if (aux^.der <> nil) encolar(cola, aux^.der);
    end;
end;

algo asi tambien..
ahi tenes que fijarte como sacar el nro de nivel..pero creo que es facil no?

*Con respecto a la altura del arbol es la cantidad de niveles..que tiene bueno..con lo de arriba deberias darte cuenta..y en si tb lo podrias hacer recursivo..siempre quedandote con el nro..mayor recorriendo hacia la der e izq.

espero que te haya dado una idea..todo esto, de todas maneras las operaciones con arboles binarios no tienen demasiada complicacion..ya que solo tenemos 2 nodos! por nivel..al insertar deberias insertar ordenadamente..el problema de esto es que el arbol por lo gral queda desbalanceado..pero se pueden aplicar tecnicas de balanceo.

saludos!

LA PATRIA SERA LIBRE
Responder Con Cita
  #3  
Antiguo 06-02-2006
adpa adpa is offline
Miembro
 
Registrado: dic 2005
Posts: 22
Poder: 0
adpa Va por buen camino
Muchas Gracias Reina.
Pero tengo alguna duda más.
1 - No tengo muy claro como escribir en el nivel que me encuetro.
2 - Para empezar a mostrar por el último nivel en vez por el primero.
En vez de ir escribiendo lo ira metiendo en una pila y luego voy desapilando y ya está verdad?

3 - Como puedo crear una copia de un arbol.

Muchas Gracias
Responder Con Cita
  #4  
Antiguo 06-02-2006
reina reina is offline
Miembro
 
Registrado: ago 2005
Ubicación: Capital Federal-La Plata (Bs As)
Posts: 147
Poder: 19
reina Va por buen camino
Holas again..! te recomiendo te hagas un ejemplito de un arbolito..y sigas el algoritmo para entenderlo..lo de los niveles es facil..tendrias que poner un condición acordate que el nivel tiene 2 nodos izq y derecho ..salvo la raiz!eso que te pase imprime por niveles..ademas es iterativo mucho mas facil de entender..que uno recursivo.
Y con respecto a la copia del arbol..si lo que buscas es hacer otro arbol identico..podes utilizar el recorrido en pre_orden..algo asi:
Código Delphi [-]
   procedure pre_orden(A:arbol);
   begin
        If A <> nil then
        begin        
             insertarAbol_new(A^.dato, B);**el arbol B seria el nuevo
             pre_orden(A^.izq) ;
             pre_orden(A^.der);
   end;

y asi seria..creo jaja..no tengo mucho manejo de puntero

Saludos!

LA PATRIA SERA LIBRE
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemas con instalacion y archivo idr20009.dll allende Varios 0 19-01-2006 15:46:33
Problemas con componente TGridView DANY OOP 0 28-10-2005 23:04:13
problemas con visualizacion en winxp seb@ OOP 1 07-08-2005 15:19:51
Problemas al Empaquetar una aplicación con... oracle Varios 1 26-07-2005 15:46:22
¿Da problemas instalar Delphi7 teniendo ya Delphi5? rrf Varios 2 03-06-2005 18:54:22


La franja horaria es GMT +2. Ahora son las 06:22:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi