• Lunes 29 de Abril de 2024, 06:46

Autor Tema:  Funcion No Recursiva (arboles)  (Leído 4270 veces)

henry0078

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Funcion No Recursiva (arboles)
« en: Sábado 14 de Febrero de 2004, 20:44 »
0
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

shephiroth

  • Miembro activo
  • **
  • Mensajes: 30
    • Ver Perfil
Re: Funcion No Recursiva (arboles)
« Respuesta #1 en: Domingo 15 de Febrero de 2004, 21:08 »
0
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.

henry0078

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Funcion No Recursiva (arboles)
« Respuesta #2 en: Martes 17 de Febrero de 2004, 21:57 »
0
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

henry0078

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Funcion No Recursiva (arboles)
« Respuesta #3 en: Martes 17 de Febrero de 2004, 21:59 »
0
disculpa creo que esa ®  equivale a ( r )

henry0078

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Funcion No Recursiva (arboles)
« Respuesta #4 en: Martes 17 de Febrero de 2004, 22:03 »
0
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);
   }   
}

gothmog

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re: Funcion No Recursiva (arboles)
« Respuesta #5 en: Jueves 1 de Abril de 2004, 01:59 »
0
No se si te seguira interesando, pero para hacer lo que quieres iterativamente, puedes utilizar una cola o una pila como estructura auxiliar.

-SB-

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: Funcion No Recursiva (arboles)
« Respuesta #6 en: Sábado 3 de Abril de 2004, 19:30 »
0
Aun con la cola y la pila recorrer un arbol sin utilizar recursividad...

gothmog

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
Re: Funcion No Recursiva (arboles)
« Respuesta #7 en: Domingo 4 de Abril de 2004, 18:58 »
0
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.