Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [c] creare lista ordinata da albero binario

    ciao a tutti, devo fare una funzione che dato un nodo qualsiasi di un albero, crea una lista ordinata di tutti i nodi del sottoalbero sinistro oppure destro, a seconda della specifica data in “direzione” (convenzione: 'p' = sx quindi sx, 's' = dx).
    Ho provato a fare una vista inorder dell'albero memorizzando i nodi in testa alla lista, però salta qualche nodo che è correttamente nell'albero

    codice:
    //fa la vista inorder dell'albero e inserisce i nodi nella lista
    lista_elem *ins_testa(nodo_albero nodo, lista_elem *next) {
        lista_elem *temp;
        temp = (lista_elem*) malloc(sizeof(lista_elem));
        if (nodo.sx) temp = ins_testa(*nodo.sx, next);
        temp->cod = nodo.cod;
        temp->ora = nodo.ora;
        temp->next = next;
        next = temp;
        if (nodo.dx) temp = ins_testa(*nodo.dx, next);
        return temp;      
    }
    
    //funzione principale che inserisce il nodo passato per argomento nella lista e poi in
    //base alla direzione chiama la funzione ins_testa passandogli il nodo sx o dx
    lista_elem *crea_lista(nodo_albero nodo, char direzione) {
        nodo_albero *n = &nodo;
        if (n == NULL) return NULL;
        lista_elem *L;
        L = (lista_elem*) malloc(sizeof(lista_elem));
        L->cod = nodo.cod;
        L->ora = nodo.ora;
        L->next = NULL;
        if (nodo.sx && direzione == 'p') {
            L = ins_testa(*nodo.sx,L);
        }
        if (nodo.dx && direzione == 's') {
            L = ins_testa(*nodo.dx,L);
        }
        return L;
    }
    vi inserisco anche le strutture albero e lista
    codice:
    typedef struct nodo nodo_albero;
    struct nodo {
        int cod;
        int ora;
        nodo_albero *sx;
        nodo_albero *dx;
        nodo_albero *padre;
    };
    
    typedef struct elem lista_elem;
    struct elem {
        int cod;
        int ora;
        lista_elem *next;
    };
    un grazie a chi mi da una risposta

    ciao davide

  2. #2

    up

    nessuno mi sa dare qualche consiglio??? :master:

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.