Autor
|
Tema: Duda Arboles - C (Leído 3,282 veces)
|
Jupiter34
Desconectado
Mensajes: 24
|
Estimados, Estoy practicando, pero no logro dar con la tecla... El tema es ARBOLES. He logrado recorrer el arbol, mostrandolo Izq Raiz Der, Raiz Izq Der y Izq Der Raiz, tambien la profundidad y buscar un Nodo en Particular... No logro sumar los valores (hoja->dato) de los nodos! De manera recursiva! //Mostrar en orden (IRD) void mostrarOrden (treenode *hoja) { if (hoja!=NULL) { mostrarOrden(hoja->izq); mostrarOrden(hoja->der); } return; } //Mostrar en preOrden (RID) void mostrarPreorden(treenode *hoja) { if (hoja!=NULL) { mostrarPreorden(hoja->izq); mostrarPreorden(hoja->der); } return; } //mostrar en posOrden (IDR) void mostrarPosorden(treenode *hoja) { if (hoja!=NULL) { mostrarPosorden(hoja->izq); mostrarPosorden(hoja->der); } return; } //Calcula profundidad del arbol int profundidad(treenode *hoja) { if(hoja==NULL) return 0; else{ int profI=profundidad(hoja->izq); int profD=profundidad(hoja->der); if(profI>profD) return profI+1; else return profD+1; } return; } /* //Buscar nodo treenode *busqueda(treenode *hoja, int busq) { if(hoja==NULL) return 0; else if(busq==hoja->dato) return hoja; if(busq<hoja->dato) { return busqueda(hoja->izq,busq); }else{ return busqueda(hoja->der,busq); } return; } */ //Cuenta nodos impares int contarImp(treenode *hoja){ if (hoja!=NULL) { contarImp(hoja->izq); int cuenta=cuenta+(hoja->dato%2==0); contarImp(hoja->der); return cuenta; } }
Me podrian dar una mano? Como siempre, mil gracias!! Saludos para todos!
|
|
|
En línea
|
|
|
|
Oblivi0n
Desconectado
Mensajes: 392
Odio las ranas.
|
Haz una modificacion a cualquiera de los caminos para recorrer un arbol ( postorden, inorden, preorden), cogiendo el dato de cada nodo y sumandolo.
|
|
« Última modificación: 9 Noviembre 2012, 22:53 pm por Oblivi0n »
|
En línea
|
|
|
|
Jupiter34
Desconectado
Mensajes: 24
|
Oblivi0n muchas gracias por la pronta respuesta...El tema es que tengo que contar, los impares...realize mal la consulta...
No se donde o que recibiria el (hoja->dato%2==0)
Me logro explicar? Tengo que ver los nodos y contar los impares!
|
|
|
En línea
|
|
|
|
Oblivi0n
Desconectado
Mensajes: 392
Odio las ranas.
|
es simple, puedes meter una sentencia tal que if(nodo->dato %2 == 0) { seguir con el siguiente nodo } else { sumar el dato y seguir con el camino }
( ahora mismo no te puedo poner código )
|
|
|
En línea
|
|
|
|
Ferno
Desconectado
Mensajes: 375
|
Puedes sumarle un parámetro a cada una de las funciones que recorren el árbol que sea un puntero a int (o a float o double, dependiendo del tipo de dato). Dentro de la función le sumas el dato correspondiente a esa variable, y cuando retorne de la función recursiva, imprimes el dato en el programa principal
|
|
|
En línea
|
|
|
|
Jupiter34
Desconectado
Mensajes: 24
|
Listo chicos! Muchas gracias!! Asi quedo! //Cuenta nodos impares int contarImp(treenode *hoja,int imp){ if (hoja!=NULL) { if(hoja->dato%2!=0) { imp++; } return contarImp(hoja->izq,imp); return contarImp(hoja->der,imp); } return imp; }
Y el dato importante..en la llamada... impar=contarImp(arb,imp+1);
El +1
|
|
|
En línea
|
|
|
|
Jupiter34
Desconectado
Mensajes: 24
|
Estoy peleando..Se como sacar el Maximo, peroquiero discriminar entre par o impar...
Como debería hacerlo? No se para donde ir!
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
//Cuenta nodos impares int contarImp(treenode *hoja,int imp){ if (hoja!=NULL) { if(hoja->dato%2!=0) { imp++; } return contarImp(hoja->izq,imp); return contarImp(hoja->der,imp); } return imp; }
Y el dato importante..en la llamada... impar=contarImp(arb,imp+1);
No, no funciona. Imagina por un momento que se pasa un árbol vació, en ese caso la función termina de inmediato y debe reportar cero números impares. Otro error en la función es tener dos sentencias de retorno dentro del condicional "if", una a continuación de la otra: return contarImp(hoja->izq,imp); return contarImp(hoja->der,imp); /* <== Nunca se ejecuta */
Para contar el numero de valores impares puedes utilizar, por ejemplo: int contarImp(treenode *p) { return p == NULL ? 0 : p->dato % 2 + contarImp(p->izq) + contarImp(p->der); }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Arboles en Java
Java
|
vbajo
|
1
|
18,181
|
19 Diciembre 2006, 22:54 pm
por Ragnarok
|
|
|
listas y arboles
Java
|
Growdes
|
4
|
6,601
|
11 Septiembre 2009, 19:54 pm
por Skeletron
|
|
|
Arboles generales
Java
|
kattysol7
|
2
|
7,699
|
7 Mayo 2010, 01:00 am
por kattysol7
|
|
|
Arboles binarios
Programación C/C++
|
josue_tux
|
3
|
10,293
|
9 Mayo 2010, 20:18 pm
por leogtz
|
|
|
Arboles BST
Java
|
kanon_feeb
|
1
|
2,717
|
9 Mayo 2012, 14:40 pm
por raul_samp
|
|