Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    11

    [c++Alberi binari, profondità e foglie

    Ciao a tutti, sono nuovo sul forum, vi chiedo un aiuto relativamente agli alberi binari, mi servirebbe di capire come realizzare un algoritmo per calcolare la massima profondità di un albero (meglio ricorsivo penso no?) e uno per calcolarne il numero di foglie....avete qualche link o esempio? Grazie ancora, Pised

  2. #2
    Ma ti serve sapere l'algoritmo o proprio il codice C++???

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    11
    ciao, grazie per la risposta, beh comprendere l'algoritmo sarebbe gia utile, se trovo anche il codice sicuramente meglio Grazie ancora

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    11
    nessuno?

  5. #5
    Cominciamo dal calcolo del numero di foglie.
    Penso che il problema si possa definire così:
    Hai un albero binario, le foglie sono quei nodi che non hanno nè figlio destro nè figlio sinistro.
    Quindi puoi immaginare una funzione che scorra l'albero e che incrementi una variabile GLOBALE quando incontra un nodo senza figli, quindi una foglia. In pseudo linguaggio dovrebbe essere così:

    codice:
    conta_foglie(T)
    if (T!=NIL) //controllo che non sia un albero vuoto
      if (T.dx!=NIL) //se esiste un figlio destro allora visita il figlio destro
        conta_foglie(T.dx);
      if (T.sx!=NIL) //se esiste un figlio sinistro allora visita il figlio sinistro
        conta_foglie(T.sx);
      if (T.sx==NIL)AND(T.dx==NIL) //se non ha figli, allora incrementa la variabile GLOBALE FOGLIE
        foglie=foglie+1

    Per quanto riguarda il livello massimo di profondità, è un pochettino più complicato...penso possa risolversi in questo modo. Porti dietro una variabile locale che si incrementa ogni volta che scendi di livello, confronti questo valora con un valore GLOBALE e ti salvi quello massimo.

    codice:
    conta_livello(T,liv)
    if (T!=NIL) //controlla che non sia un albero vuoto
      if (T.dx!=NIL) //se ha un figlio destro, va a destra e incrementa il livello
        conta_livello(T.dx,liv+1)
      if (T.sx!=NIL) //se ha un figlio sinistro, va a sinistra e incrementa il livello
        conta_livello(T.sx,liv+1)
      if (T.sx==NIL)AND(T.dx==NIL) //se non ha figli, ha raggiunto una foglia
        if max<liv //confronta il valore del livello con una variabile GLOBALE e se è il massimo livello
          max=liv  //aggiorna la variabile GLOBALE
    Spero siano funzioni corrette e che funzionino

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.