![lloron](http://static.forosdelweb.com/fdwtheme/images/smilies/chillando.png)
por fa please.. me hechan una manita ?
mil grax
| |||
Hola, soy nueva please ayuda ![]() por fa please.. me hechan una manita ? mil grax |
| ||||
Re: Hola, soy nueva please ayuda #include "ftabilo" ;) De entrada, tienes algun problema de c/c++ y/o diseño e implementación de arboles binarios ?? Pasado eso, podrías poner el boceto de la idea que tengas del arbol genealogico (el diseño-resquema-resumen basicamente), asi como dudas y problemas que tengas, para implementarlo basado en un arbol binario. |
| |||
![]() Hola chicos, estoy en el equipo con caro... Bien, hemos estado buscando por varios dias por internet pero hay muy pocas paginas que expliquen super bien los arboles binarios o al menos, como utilizarlos con texto. Tengo una implementación de un árbol binario (para introducir numeros) con algunas modificaciones mias, no le presten atención a todas las funciones (sobre todo la de espejo, creo que no funciona muy bien)
Código:
Ahora, se supone queeeee emm... tiene que poderse hacer esto:#include <iostream> // Declaracion de la árbol struct node{ int info; struct node *izq, *der, *padre; }; typedef struct node *nodePtr; nodePtr arbol = NULL; // Obtener memoria para un nodo nuevo nodePtr getNode(void){ nodePtr p; p=(nodePtr)malloc(sizeof(struct node)); return(p); } // Liberar la memoria ocupada por un nodo void freeNode(nodePtr p){ free(p); } // Función para crear un nodo nodePtr makeTree(int x){ nodePtr p; p = getNode(); p->info = x; p->izq = NULL; p->der = NULL; p->padre = NULL; return p; } //Establecer un nodo como hijo izquierdo de p void setIzq(nodePtr p, int x){ if(p == NULL) std::cout<<"Insercion nula\n"; else if(p->izq != NULL) std::cout<<"Insercion no valida\n"; else { p->izq=makeTree(x); p->izq->padre = p; } } //Establecer un nodo como hijo derecho de p void setDer(nodePtr p, int x){ if(p == NULL) std::cout<<"Insercion nula\n"; else if(p->der != NULL) std::cout<<"Insercion no valida\n"; else { p->der=makeTree(x); p->der->padre = p; } } // Recorrido pre-orden void preTr(nodePtr tree){ if (tree != NULL){ std::cout << tree->info << ", "; preTr(tree->izq); preTr(tree->der); } } // Espejo de recorrido pre-orden void preTrEsp(nodePtr tree) { nodePtr p; if (tree != NULL){ p = tree->izq; tree->izq = tree->der; tree->der = p; std::cout << tree->info << ", "; preTrEsp(tree->izq); preTrEsp(tree->der); } } // Recorrido en-orden void inTr(nodePtr tree){ if (tree != NULL){ inTr(tree->izq); std::cout << tree->info << ", "; inTr(tree->der); } } // Recorrido post-orden void postTr(nodePtr tree){ if (tree != NULL){ postTr(tree->izq); postTr(tree->der); std::cout << tree->info << ", "; } } void insertNode(int x) { nodePtr p,q; if (arbol == NULL) { arbol=makeTree(x); } else { p=q=arbol; while(x != p->info && q != NULL){ p=q; if( x < p->info) q = p->izq; else q = p->der; } if (x < p->info) setIzq(p,x); else setDer(p,x); } } // Liberar la memoria ocupada por todo el árbol void delete_all(void){ } // Programa principal int main(int argc, char* argv[]) { char c; int numero; do{ printf("Entre la opción deseada [insertar a la (i)zquierda | insertar a la (d)erecha | (l)ist | (q)uit]: "); scanf("%s", &c); switch (c) { case 'i': printf("Entre un numero: "); scanf("%d", &numero); insertNode(numero); printf("Se insertó satisfactoriamente el numero %d en la lista.\n", numero); break; case 'l': // Contar nodos int contarNodos (nodePtr arbol);{ if(arbol==NULL){ return 0; } else{ } } printf("Recorrido en pre-orden: "); preTr(arbol); printf("\n"); printf("Recorrido en pre-orden espejo: "); preTrEsp(arbol); printf("\n"); printf("Recorrido en-orden: "); inTr(arbol); printf("\n"); printf("Recorrido en post-orden: "); postTr(arbol); printf("\n"); break; case 'q': delete_all(); std::cout << "Ãrbol borrado satisfactoriamente\n"; } } while (c != 'q'); return 0; } Adicionar nuevos miembros a la jerarquia, indicando el padre Visualizar todos los descendientes de una persona dada Visualizar los hermanos y primos hermanos de una persona dada Visualizar todos los ancestros de una persona dada Para empezar, no tengo ni la menor idea como meter texto en un arbol binario, ese programa solo sirve con numeros Segundo, no se como voy a meter los datos a mano, para ponerlos en el arbol como yo quiera.. En alguna parte del codigo vi que los metia ya sea a la izq o a la derecha, supongo que si separo esa parte en 2 funciones al menos ya puedo escoger en que lado las pongo? Me refiero a esta parte:
Código:
Sea el caso que sea, tampoco tengo idea de como modificarlo.while(x != p->info && q != NULL){ p=q; if( x < p->info) q = p->izq; else q = p->der; } if (x < p->info) setIzq(p,x); else setDer(p,x); Gracias por adelantado! |