SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: phoenix en Martes 7 de Mayo de 2002, 05:15

Título: Re: Recorrer los nodos de un árbol binario, en orden
Publicado por: phoenix en Martes 7 de Mayo de 2002, 05:15
Hola usuarios: me podrían desarollar los fuentes sobre  el recorrido de los nodos de un árbol binario, ordenadamente, utilizando algoritmos recursivos y ,otros, no recursivos.
Disculpen las molestías. Muchas gracias. Saludos.;)
Título: Re: Recorrer los nodos de un árbol binario, en orden
Publicado por: olla en Martes 7 de Mayo de 2002, 12:42
Vamos a ver:
-RECURSIVAMENTE:

Hay tres métodos Inorden, Preorden y Postorden, según el orden de recorrido de los nodos.

Inorden:
 Primero procesamos el Hijo Izquierdo luego la raiz y finalmente el Hijo Derecho.

void inorden(arbol a)
{
  arbol de,iz;
  datosarbol x;
if (!a.vacio())
{
  iz=a.hijoizq();
  de=a.hijoder();
  x=a.raiz();
  inorden(iz);
  write(x)//proceso la raiz según el caso
  inorden(de);
}
}


Preorden:
Primero procesamos la raiz, luego  el Hijo Izquierdo y  finalmente el Hijo Derecho.

void preorden(arbol a)
{
  arbol de,iz;
  datosarbol x;
if (!a.vacio())
{
  iz=a.hijoizq();
  de=a.hijoder();
  x=a.raiz();
  write(x)//proceso la raiz según el caso
  inorden(iz);
  inorden(de);
}
}

Postorden:
Primero procesamos el Hijo Izquierdo luego el  Hijo Derecho y finalmente la raiz.

void postorden(arbol a)
{
  arbol de,iz;
  datosarbol x;
if (!a.vacio())
{
  iz=a.hijoizq();
  de=a.hijoder();
  x=a.raiz();
  inorden(iz);
  inorden(de);
  write(x)//proceso la raiz según el caso
}
}


NO RECURSIVO.

En cuanto al recorrido no recursivo se hace con la ayuda de una cola, se trata de un recorrido por niveles.


void recorrido(arbol a)
{
  cola c;
  arbol b;
  c.crearcola();
  c.inscola(a);//inserto el arbol en la cola
  while (!c.colavacia())
 {
   c.frentecola(b);
   iz=b.hijoizq();
   de=b.hijoder();
   x=b.raiz();
   write(x);//proceso raiz según caso
   c.inscola(iz);
   c.inscola(de);
}
}


Espero que te haya servido de ayuda...
Título: Re: Recorrer los nodos de un árbol binario, en orden
Publicado por: phoenix en Miércoles 8 de Mayo de 2002, 03:35
Olla: gracias por codificar el tema del recorrido de arbol binario en forma orden aplicando técnicas recursivas, pero no he podido funcionar para ejecutarle, estuve estudiando sobre este tema, y me siento complicado...me podrías desarrollar todos sobre este tema con técnicas recursiva, y no recursivas. te falta poner el main(), construir el arbol y mostrar el recorrido de dicho arbol...
disculpa las molestías, saludos
Título: Re: Recorrer los nodos de un árbol binario, en orden
Publicado por: olla en Miércoles 8 de Mayo de 2002, 13:24
Hay tienes el principal, ten encuenta que debes de tener implementada la clase arbol para poder insertar nodos en un arbol:

Voy a suponer que tengo un arbol de números enteros:

void main()
{
  arbol a;//me creo un árbol
  a.insorden(3);//introduzco numeros en   el árbol
  a.insorden(5);  
  a.insorden(1);
  a.insorden(8);
  a.insorden(9);
//me recorro los nodos del arbol con los algoritmos de ayer.
  inorden(a);  
  preorden(a);
  postorden(a);
//ten encuenta que los tres se recorren el arbol pero en diferente orden.
a.borarbol();//borro todo el arbol
}
Título: Recorrer los nodos de un árbol binario, en orden
Publicado por: phoenix en Jueves 9 de Mayo de 2002, 00:22
olla, perdoname no quise molestarte porque todavía tengo dudas, Ud. pusiste en el main()  la variable  o parametro 'arbol', no se pudo declarar al ejecutarse. me gustaría que Ud. haga un desarrollo completo para poder ejecutarse bien, bien y funciona bien, bien..
Espero que haya funcionado bien...
Muchas Gracias.
Saludos.