Aiuto albero binario

di il
7 risposte

Aiuto albero binario

Devo allocare una lista di interi ordinati partendo da un albero binario con una funzione allocaLista che prenda in input l'albero e un valore v che rappresenta un livello dell'albero.
Ora il mio problema è che non so come ci si possa muovere su un livello di un albero...




raggiunto il livello magari con un
 for(i=0;i<v-1;i++)
             radice=radice->sx||radice->dx;
poi non so come muovermi rimanendo su quel livello.
suggerimenti?

7 Risposte

  • Re: Aiuto albero binario

    Non puoi muoverti sul livello perché non ci sono rami che colleghino i nodi alla stessa profondità.
    La soluzione è salvarti la profondità di quel livello in una variabile e poi esplorare l'albero inserendo nella lista tutti i nodi che si trovano a quella profondità.
  • Re: Aiuto albero binario

    minomic ha scritto:


    Non puoi muoverti sul livello perché non ci sono rami che colleghino i nodi alla stessa profondità.
    La soluzione è salvarti la profondità di quel livello in una variabile e poi esplorare l'albero inserendo nella lista tutti i nodi che si trovano a quella profondità.
    Ma appunto perchè non posso muovermi sullo stesso livello attraverso i rami mi viene il dubbio di come si faccia a ottenere i valori dei nodi allo stesso livello... Salvarmi la profondità in una variabile? Ho il presentimento che il ragionamento sia molto più complesso
  • Re: Aiuto albero binario

    Secondo me non è molto complesso... Vuoi il livello 2? Benissimo: esplori l'albero e, quando incontri un nodo a profondità 2 lo aggiungi alla lista. Fine.
  • Re: Aiuto albero binario

    minomic ha scritto:


    Secondo me non è molto complesso... Vuoi il livello 2? Benissimo: esplori l'albero e, quando incontri un nodo a profondità 2 lo aggiungi alla lista. Fine.

    bene cosi aggiungo sempre lo stesso nodo seguendo sempre lo stesso percorso... il problema di avanzare di nodo sullo stesso livello non te lo poni proprio?
  • Re: Aiuto albero binario

    SorMediu ha scritto:


    minomic ha scritto:


    Secondo me non è molto complesso... Vuoi il livello 2? Benissimo: esplori l'albero e, quando incontri un nodo a profondità 2 lo aggiungi alla lista. Fine.
    bene cosi aggiungo sempre lo stesso nodo seguendo sempre lo stesso percorso... il problema di avanzare di nodo sullo stesso livello non te lo poni proprio?
    Ma stai scherzando? Io cerco di aiutarti e tu mi rispondi così? Bene, fai una cosa: ponitelo tu il problema.
  • Re: Aiuto albero binario

    minomic ha scritto:


    SorMediu ha scritto:


    minomic ha scritto:


    Secondo me non è molto complesso... Vuoi il livello 2? Benissimo: esplori l'albero e, quando incontri un nodo a profondità 2 lo aggiungi alla lista. Fine.
    bene cosi aggiungo sempre lo stesso nodo seguendo sempre lo stesso percorso... il problema di avanzare di nodo sullo stesso livello non te lo poni proprio?
    Ma stai scherzando? Io cerco di aiutarti e tu mi rispondi così? Bene, fai una cosa: ponitelo tu il problema.
    ho solo chiesto: il problema di avanzare di nodo non te lo poni proprio?
    nel senso, non c'è bisogno magari?

    comunque me lo sono posto da solo dovrebbe andare
    void valoriLivello(alb t, int v) {
    if (t == NULL)
    return;
    
    if (v == 0)
    printf("%d", t->info);
    
    valoriLivello(t->sx, v - 1);
    valoriLivello(t->dx, v - 1);
    }
  • Re: Aiuto albero binario

    
    void valoriLivello(alb t, int v) {
          if (t == NULL)
              return;
    
           if (v != 0){
              valoriLivello(t->sx, v - 1);
              valoriLivello(t->dx, v - 1);
           }
            printf("%d", t->info);
            return;
    }
    
    Onestamente non ho provato, ma così dovresti fare un bel pruning dell'albero delle ricorsioni quando la profondità cercata è molto minore dell'altezza dell'albero.
Devi accedere o registrarti per scrivere nel forum
7 risposte