SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: henry0078 en Sábado 14 de Febrero de 2004, 20:44

Título: Funcion No Recursiva (arboles)
Publicado por: henry0078 en Sábado 14 de Febrero de 2004, 20:44
quisiera uqe me ayuden en hacer una funcion no recursiva que cuente los nodos  hoja de un arbol  ,,,,,,yo la hize pero por recursividad ,,,,mi pregunta es:
como hago lo mismo pero sin usar funciones recursivas..

atte
henry luis
Título: Re: Funcion No Recursiva (arboles)
Publicado por: shephiroth en Domingo 15 de Febrero de 2004, 21:08
Buenas. No se a que te refieres. En principio eliminar una recursividad depende de la propiea recursividad. Hay algunas que con un bucle for o while se pueden romper, pero para otras se necesitan utilizar varias de estas estructuras, anidarlas, y utilizar algunas variables y/o vectores extras.

Si quieres coloca tu funcion recursiva e intentaré romperla.
Título: Re: Funcion No Recursiva (arboles)
Publicado por: henry0078 en Martes 17 de Febrero de 2004, 21:57
osea me dejaron que haga una funcion no recursiva uqe cuente las hojas de un arbol,,,por loque he leido  es mas facil aserlo con recursividad  pero lo uqe no entiendo es como hacer una funcion no recursiva  



a continuacion te mando mi codigo en   ,,este codigo usa recursividad lo que quiero es hacerlo ocn una funcion no recursiva



#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
struct nodo
{
int elemento;
nodo*izqda,*drcha;

};
typedef nodo Nodo;
//-----------------------------------------------------
void insertar(Nodo**raiz,int nuevoelem);
Nodo*crearnodo(int nuevoelem);
void visualizar(Nodo*r);
void contarhojas(Nodo*r);
//-----------------------------------------------------
int hojas=0;



void main()
{
int num;
Nodo*R=0;
cout<<"ingrese el numero(0->fin)";
cin>>num;
do
{
   if(num)
   {insertar(&R,num);   
   cout<<"ingrese el numero(0->fin)";
   cin>>num;
   }

}while(num);
cout<<"RECORRIDO EN ORDEN ES:"<<endl;
visualizar®;

cout<<"el numero de nodos hojas del arbol es"<<endl;
contarhojas®;

   
cout<<hojas<<endl;

getch();


}
//-------------------------------------------------
void insertar(Nodo**raiz,int nuevoelem)
{
   if(!(*raiz))
      *raiz=crearnodo(nuevoelem);
   else
      if(nuevoelem<(*raiz)->elemento)
      insertar(&((*raiz)->izqda),nuevoelem);
      else
      insertar(&((*raiz)->drcha),nuevoelem);

}
//---------------------------------------------------
Nodo*crearnodo(int nuevoelem)
{Nodo*t;
   t=(Nodo*)malloc(sizeof(nodo));
   t->elemento=nuevoelem;
   t->drcha=t->izqda=NULL;
   return t;

}

void visualizar(Nodo*r)
{if®
   {
   
   
   visualizar(r->izqda);
   cout<<r->elemento<<endl;
   //visualizar(r->izqda);
   visualizar(r->drcha);

   }
}

void contarhojas(Nodo*r)
{if®
   {
   
   if((r->drcha==NULL)&&(r->izqda==NULL))
   hojas=hojas+1;   
   
   contarhojas(r->izqda);
   
   contarhojas(r->drcha);
   }   
}





te agradeceria mucho si me ayudaras  ,,es un ejercicio uqe me dejaron  en la universidad  pero  estoy investigando y  he visto que se pueden usar arrays   ,,pero es un poco confusoo.......


por favoe ayudame si  ,gracias
Título: Re: Funcion No Recursiva (arboles)
Publicado por: henry0078 en Martes 17 de Febrero de 2004, 21:59
disculpa creo que esa ®  equivale a ( r )
Título: Re: Funcion No Recursiva (arboles)
Publicado por: henry0078 en Martes 17 de Febrero de 2004, 22:03
aqui esta el codigo sin errores



#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
struct nodo
{
int elemento;
nodo*izqda,*drcha;

};
typedef nodo Nodo;
//-----------------------------------------------------
void insertar(Nodo**raiz,int nuevoelem);
Nodo*crearnodo(int nuevoelem);
void visualizar(Nodo*r);
void contarhojas(Nodo*r);
//-----------------------------------------------------
int hojas=0;



void main()
{
int num;
Nodo*R=0;
cout<<"ingrese el numero(0->fin)";
cin>>num;
do
{
   if(num)
   {insertar(&R,num);   
   cout<<"ingrese el numero(0->fin)";
   cin>>num;
   }

}while(num);
cout<<"RECORRIDO EN ORDEN ES:"<<endl;
visualizar( R );

cout<<"el numero de nodos hojas del arbol es"<<endl;
contarhojas( R );

   
cout<<hojas<<endl;

getch();


}
//-------------------------------------------------
void insertar(Nodo**raiz,int nuevoelem)
{
   if(!(*raiz))
      *raiz=crearnodo(nuevoelem);
   else
      if(nuevoelem<(*raiz)->elemento)
      insertar(&((*raiz)->izqda),nuevoelem);
      else
      insertar(&((*raiz)->drcha),nuevoelem);

}
//---------------------------------------------------
Nodo*crearnodo(int nuevoelem)
{Nodo*t;
   t=(Nodo*)malloc(sizeof(nodo));
   t->elemento=nuevoelem;
   t->drcha=t->izqda=NULL;
   return t;

}

void visualizar(Nodo*r)
{if( r )
   {
   
   
   visualizar(r->izqda);
   cout<<r->elemento<<endl;
   //visualizar(r->izqda);
   visualizar(r->drcha);

   }
}

void contarhojas(Nodo*r)
{if( r )
   {
   
   if((r->drcha==NULL)&&(r->izqda==NULL))
   hojas=hojas+1;   
   
   contarhojas(r->izqda);
   
   contarhojas(r->drcha);
   }   
}
Título: Re: Funcion No Recursiva (arboles)
Publicado por: gothmog en Jueves 1 de Abril de 2004, 01:59
No se si te seguira interesando, pero para hacer lo que quieres iterativamente, puedes utilizar una cola o una pila como estructura auxiliar.
Título: Re: Funcion No Recursiva (arboles)
Publicado por: -SB- en Sábado 3 de Abril de 2004, 19:30
Aun con la cola y la pila recorrer un arbol sin utilizar recursividad...
Título: Re: Funcion No Recursiva (arboles)
Publicado por: gothmog en Domingo 4 de Abril de 2004, 18:58
Cita de: "-SB-"
Aun con la cola y la pila recorrer un arbol sin utilizar recursividad...
Obviamente, es quitarle la gracia (y las ventajas) a la estructura de arbol y sirve solo para alguna cosa concreta, como conteos o medir la altura.