Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Hola, soy nueva please ayuda

Estas en el tema de Hola, soy nueva please ayuda en el foro de C/C++ en Foros del Web. Hola niños, soy nueva en estos foros, estudio el primer semestre de licenciatura en informatica y me gustaria que me ayuden con un programa donde ...
  #1 (permalink)  
Antiguo 02/12/2007, 15:21
 
Fecha de Ingreso: diciembre-2007
Mensajes: 1
Antigüedad: 16 años, 5 meses
Puntos: 0
Hola, soy nueva please ayuda

Hola niños, soy nueva en estos foros, estudio el primer semestre de licenciatura en informatica y me gustaria que me ayuden con un programa donde tengo que implementar un arbol genealogico desde un arbol binario
por fa please.. me hechan una manita ?

mil grax
  #2 (permalink)  
Antiguo 03/12/2007, 06:38
Avatar de ftabilo  
Fecha de Ingreso: junio-2007
Ubicación: En el Pc
Mensajes: 139
Antigüedad: 16 años, 10 meses
Puntos: 3
Re: Hola, soy nueva please ayuda

Hola, pues si das ejemplos y nos explicas mejor seria más fácil.

Voy a ser directo, en foros del web no se acostumbra a hacer el trabajo de otras personas, simplemente se les ayuda, y si ponen el codigo se les hace aportaciones.

Saludos
  #3 (permalink)  
Antiguo 03/12/2007, 07:29
Avatar de Solenbum  
Fecha de Ingreso: noviembre-2007
Mensajes: 45
Antigüedad: 16 años, 5 meses
Puntos: 0
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.
  #4 (permalink)  
Antiguo 03/12/2007, 15:48
 
Fecha de Ingreso: noviembre-2007
Mensajes: 1
Antigüedad: 16 años, 5 meses
Puntos: 0
Pregunta Re: Hola, soy nueva please ayuda

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:
#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;
}
Ahora, se supone queeeee emm... tiene que poderse hacer esto:

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:
    
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);
Sea el caso que sea, tampoco tengo idea de como modificarlo.

Gracias por adelantado!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:10.