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
void contarNodosQueContenganVocales(pnodo arbol, int &vocales)
{
if(arbol!=NULL){
switch(arbol->dato){
case 'A':
case 'E':
case 'I':
case 'O':
case 'U': vocales++;
}
contarNodosQueContenganVocales(arbol->izq,vocales);
contarNodosQueContenganVocales(arbol->der,vocales);
}
}
Y este otro procedimiento cuenta la cantidad de nodos que tienen un solo hijito
void cantidad_nodos(arbol a, int &c)
{
if(a!=NULL){
if((a->izq==NULL && a->der!=NULL) || (a->izq!=NULL && a->der==NULL))
c++;
cantidad_nodos(a->izq,c);
cantidad_nodos(a->der,c);
}
}
:laugh:
uno por uno MAFUS
Entiendo qué quieres juntar las dos en una sola función.
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.
Cita de: 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.
Ya he logrado resolverlos gracias Señor CalgaryCorpus ;-)
int vocales(arbol a)
{
int contador=0;
if(a!=NULL){
contador=vocales(a->izq)+vocales(a->der);
switch(a->dato){
case 'A':
case 'E':
case 'I':
case 'O':
case 'U': contador++;
}
}
return contador;
}
int cantidad_nodos(arbol a)
{
int contador=0;
if(a!=NULL){
contador=cantidad_nodos(a->izq)+cantidad_nodos(a->der);
if((a->izq!=NULL && a->der==NULL) || (a->izq==NULL && a->der!=NULL))
contador++;
}
return contador;
}
Asi queda mas elegante que estar haciendo un procedimiento recursivo :)
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í:
int cantidad_nodos(arbol a) {
int contador=0;
if(a!=NULL) {
contador=1 + cantidad_nodos(a->izq)+cantidad_nodos(a->der);
}
return contador;
}
Cita de: CalgaryCorpus en 8 Enero 2019, 14:23 PM
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
Cita de: Beginner Web en 6 Enero 2019, 05:38 AM
Y este otro procedimiento cuenta la cantidad de nodos que tienen un solo hijito