Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Beginner Web en 6 Enero 2019, 05:38 am



Título: pasar procedimientos recursivos a funciones en bst
Publicado por: Beginner Web en 6 Enero 2019, 05:38 am
Hola queria saber como puedo pasar los siguientes "prodecimientos" a funciones, en el primer algoritmo se modifica el valor de una variable pasada por referencia el cual en el main me dice la cantidad exacta de vocales de un arbol binario de busqueda

Código
  1. void contarNodosQueContenganVocales(pnodo arbol, int &vocales)
  2. {
  3. if(arbol!=NULL){
  4. switch(arbol->dato){
  5. case 'A':
  6. case 'E':
  7. case 'I':
  8. case 'O':
  9. case 'U': vocales++;
  10. }
  11. contarNodosQueContenganVocales(arbol->izq,vocales);
  12. contarNodosQueContenganVocales(arbol->der,vocales);
  13. }
  14. }

Y este  otro procedimiento cuenta la cantidad de nodos que tienen un solo hijito
Código
  1. void cantidad_nodos(arbol a, int &c)
  2. {
  3. if(a!=NULL){
  4. if((a->izq==NULL && a->der!=NULL) || (a->izq!=NULL && a->der==NULL))
  5. c++;
  6. cantidad_nodos(a->izq,c);
  7. cantidad_nodos(a->der,c);
  8. }
  9. }
:laugh:

uno por uno MAFUS


Título: Re: pasar procedimientos recursivos a funciones en bst
Publicado por: MAFUS en 6 Enero 2019, 09:28 am
Entiendo qué quieres juntar las dos en una sola función.


Título: Re: pasar procedimientos recursivos a funciones en bst
Publicado por: CalgaryCorpus en 6 Enero 2019, 16:24 pm
No pases variable alguna, solo devuelve el valor que te lo interesa.

Tipicamente será

condicion = ...  // Chequear dato en nodo actual

return condicion + f(nodo izquierdo) + f(nodo derecho)

Posiblente el modo null será especial.


Título: Re: pasar procedimientos recursivos a funciones en bst
Publicado por: Beginner Web en 8 Enero 2019, 00:54 am
No pases variable alguna, solo devuelve el valor que te lo interesa.

Tipicamente será

condicion = ...  // Chequear dato en nodo actual

return condicion + f(nodo izquierdo) + f(nodo derecho)

Posiblente el modo null será especial.
Ya he logrado resolverlos gracias Señor CalgaryCorpus  ;-)
Código
  1. int vocales(arbol a)
  2. {
  3. int contador=0;
  4. if(a!=NULL){
  5. contador=vocales(a->izq)+vocales(a->der);
  6. switch(a->dato){
  7. case 'A':
  8. case 'E':
  9. case 'I':
  10. case 'O':
  11. case 'U': contador++;
  12. }
  13. }
  14. return contador;
  15. }
  16.  
  17. int cantidad_nodos(arbol a)
  18. {
  19. int contador=0;
  20. if(a!=NULL){
  21. contador=cantidad_nodos(a->izq)+cantidad_nodos(a->der);
  22. if((a->izq!=NULL && a->der==NULL) || (a->izq==NULL && a->der!=NULL))
  23. contador++;
  24. }
  25. return contador;
  26. }
  27.  
Asi queda mas elegante que estar haciendo un procedimiento recursivo :)


Título: Re: pasar procedimientos recursivos a funciones en bst
Publicado por: CalgaryCorpus en 8 Enero 2019, 14:23 pm
Puedo estar equivocado, pero creo que cantidad_nodos debería sumar siempre uno.
No parece bien los if de la línea 22
Algo así:

Código
  1. int cantidad_nodos(arbol a) {
  2.   int contador=0;
  3.   if(a!=NULL) {
  4.      contador=1 + cantidad_nodos(a->izq)+cantidad_nodos(a->der);
  5.   }
  6.   return contador;
  7. }


Título: Re: pasar procedimientos recursivos a funciones en bst
Publicado por: K-YreX en 10 Enero 2019, 04:05 am
Puedo estar equivocado, pero creo que cantidad_nodos debería sumar siempre uno.

Aunque lo ha llamado <cantidad_nodos> lo que quiere es contabilizar los nodos que tienen un único hijo, por eso está implementado así :-X

Y este  otro procedimiento cuenta la cantidad de nodos que tienen un solo hijito