SoloCodigo
Programación General => C/C++ => Mensaje iniciado 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
-
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.
-
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
-
disculpa creo que esa ® equivale a ( r )
-
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);
}
}
-
No se si te seguira interesando, pero para hacer lo que quieres iterativamente, puedes utilizar una cola o una pila como estructura auxiliar.
-
Aun con la cola y la pila recorrer un arbol sin utilizar recursividad...
-
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.