Resultados 1 al 7 de 7

Duda en un Arbol Binario de Busqueda en C++

  1. #1 Duda en un Arbol Binario de Busqueda en C++ 
    Avanzado
    Fecha de ingreso
    Apr 2003
    Mensajes
    173
    Descargas
    0
    Uploads
    0
    Buenas a tod@s. Programando un ABB para la uni me ha surgido un problema.
    Tengo todas las clases definidas, pero las funciones esVacio(),Podar()..., requieren el contenido de un puntero a raiz del arbol o de una hoja...
    Como puedo hacer para llamarlos en el int main(), par saber si tengo el arbol vacio o deseo borrar desde cuaquier nodo elegido por mi.

    Gracias
    No hay 2 sin 3, siguiendo lo conseguire
    Citar  
     

  2. #2  
    Medio
    Fecha de ingreso
    Mar 2006
    Mensajes
    86
    Descargas
    0
    Uploads
    0
    Ya se que es demasiado tarde pero en fin a alguien le servira

    #include <stdio.h>
    #include <ctype.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    #define true 1

    void PORTADA(void);
    void intro_nodo(void);
    void lista_nodos(void);
    void borra_nodo(void);
    void lista_preorden();
    void lista_inorden();
    void lista_postorden();

    struct arbol *borra();
    struct arbol *crea_arbol();

    struct arbol{
    char clave;
    struct arbol *izquierda;
    struct arbol *derecha;
    };

    struct arbol *raiz;

    struct arbol *borra (struct arbol *raiz, char nodo){
    struct arbol *d1, *d2;
    if(raiz->clave == nodo){
    if(raiz->izquierda == raiz->derecha){
    free(raiz);
    return (NULL);
    }
    else if(raiz->izquierda == NULL){
    d1 = raiz->derecha;
    free(raiz);
    return (d1);
    }
    else if(raiz->derecha == NULL){
    d1 = raiz->izquierda;
    free(raiz);
    return (d1);
    }
    else{
    d2 = raiz->derecha;
    d1 = raiz->derecha;
    while(d1->izquierda)d1 = d1->izquierda;
    d1->izquierda = raiz->izquierda;
    free(raiz);
    return(d2);
    }
    }
    if(raiz->clave<nodo)
    raiz->derecha = (struct arbol *)borra(raiz->derecha, nodo);
    else
    raiz->izquierda = (struct arbol *)borra(raiz->izquierda, nodo);
    return raiz;
    }



    struct arbol *crea_arbol(struct arbol *raiz, struct arbol *aux, char dato){
    if(!aux){
    aux = (struct arbol *)malloc (sizeof(struct arbol));
    aux->izquierda = (struct arbol *)NULL;
    aux->derecha = (struct arbol *)NULL;
    aux->clave = dato;
    if(!raiz)raiz = (struct arbol *) crea_arbol(raiz, raiz, dato);
    else raiz->derecha = aux;
    return aux;
    }
    if
    (dato < aux->clave) (struct arbol*)crea_arbol(aux, aux->izquierda, dato);
    else
    if(dato > aux->clave) (struct arbol *)crea_arbol(aux, aux->derecha, dato);
    }



    void intro_nodo(void){
    char dato;
    do{
    printf("\n\tIntroduzca dato: ");
    gets(&dato);
    if(!raiz)raiz = (struct arbol *)crea_arbol(raiz, raiz, dato);
    else (struct arbol *) crea_arbol(raiz, raiz, dato);
    }while(dato);
    }



    void borra_nodo(void){
    char dato;
    printf("\n\tDato a borrar: ");
    gets(&dato);
    (struct arbol *) borra (raiz, dato);
    }



    void lista_preorden(struct arbol *aux){
    int orden;
    if(!aux)return;
    printf("\n\t%c\t", aux->clave);
    lista_preorden(aux->izquierda);
    lista_preorden(aux->derecha);
    }



    void lista_inorden(struct arbol *aux){
    int orden;
    if(!aux)return;
    lista_inorden(aux->izquierda);
    printf("\n\t%c\t", aux->clave);
    lista_inorden(aux->derecha);
    }



    void lista_postorden(struct arbol *aux){
    int orden;
    if(!aux)return;
    lista_postorden(aux->izquierda);
    lista_postorden(aux->derecha);
    printf("\n\t%c\t", aux->clave);
    }



    void lista_nodos(void){
    clrscr();
    printf("\n\tListado de los nodos del arbol");
    printf("\n\tP.............Preorden");
    printf("\n\tI.............Inorden");
    printf("\n\tS.............Postorden");
    switch(toupper(getche())){
    case 'P': lista_preorden(raiz);
    break;
    case 'I': lista_inorden(raiz);
    break;
    case 'S': lista_postorden(raiz);
    break;
    }
    }




    void main(void){
    raiz = (struct arbol *)NULL;
    while(true){
    clrscr();
    printf("\n\tMenu del programa de un arbol");
    printf("\n\tA.............Añadir nodo");
    printf("\n\tL.............Listado de nodos");
    printf("\n\tB.............Borrar nodos");
    printf("\n\tX.............Terminar");
    switch(toupper(getche())){
    case 'A': intro_nodo();
    break;
    case 'L': lista_nodos();
    break;
    case 'B': borra_nodo();
    break;
    case 'X': exit(0);}}}
    Citar  
     

  3. #3  
    Avanzado
    Fecha de ingreso
    Apr 2003
    Mensajes
    173
    Descargas
    0
    Uploads
    0
    muchas gracias por el arbol.
    Muy currado XDXD
    No hay 2 sin 3, siguiendo lo conseguire
    Citar  
     

  4. #4  
    Medio
    Fecha de ingreso
    Mar 2006
    Mensajes
    86
    Descargas
    0
    Uploads
    0

    Muy bueno que te haya servido.
    ojala mueras joven
    Citar  
     

  5. #5  
    Moderador HH
    Fecha de ingreso
    Dec 2001
    Ubicación
    Galiza
    Mensajes
    3.129
    Descargas
    0
    Uploads
    0
    Te puedes explicar ChotaJr¿?¿?
    Citar  
     

  6. #6  
    Moderador HH
    Fecha de ingreso
    Sep 2003
    Mensajes
    1.384
    Descargas
    21
    Uploads
    5
    Ya lei varios posts de ChotaJr y puedo decir que de assembler y C/C++ parece que sabe, pero es un poco agresivo , ¿no?


    Chau saludos
    - Me desagrada
    - ¿Por qué?
    - No estoy a su altura.
    ¿Ha respondido así alguna vez un hombre?

    Friedrich Nietzsche



    Citar  
     

  7. #7  
    Medio
    Fecha de ingreso
    Mar 2006
    Mensajes
    86
    Descargas
    0
    Uploads
    0

    ok lo acepto no fue lo adecuado decirle que muera joven pero es un chiste local creo que no debi decirlo porque solo yo me entiendo pero el punto qes que le sirvio el arbol y un usuario contento es un usuario que potencialmente nos podria ayudar despues cuando ya se vuelva mejor programador asi como yo os he ayudado el podra ayudar en fin lo siento.
    Citar  
     

Temas similares

  1. Busqueda en un arbol c++
    Por herc en el foro PROGRAMACION DESKTOP
    Respuestas: 1
    Último mensaje: 11-05-2012, 19:58
  2. Árbol caído en la India
    Por hystd en el foro OFF-TOPIC
    Respuestas: 2
    Último mensaje: 16-09-2009, 22:20
  3. Respuestas: 2
    Último mensaje: 15-06-2009, 03:39
  4. Copiar arbol de directorios CMD!!
    Por clinic en el foro WINDOWS
    Respuestas: 7
    Último mensaje: 24-09-2007, 09:26
  5. Visualizar Arbol Binario de Busqueda
    Por Deskicio en el foro GENERAL
    Respuestas: 2
    Último mensaje: 11-01-2006, 20:33

Marcadores

Marcadores