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

    [Strutture dati]: Scorrere un albero

    Salve a tutti, devo fare questo esercizio: "Scrivere la funzionepublic static <E>Iterable<E> selectLeaves(Tree<E> T, int k ) che restituisce una collezione iterabile delle fogli dell’albero a profondità k." Come faccio a scorrere l'albero? Avevo pensato di fare un for da 0 a k-1 che partisse dal nodo root e usare la funzione children(p) che data una posizione restituisce una collezione iterabile dei figli di p, ma non so proprio come gestire il tutto. Dovrei usare children(p) su ogni elemento della collezione restituita ma sarebbe un casino. Sicuramente mi sto complicando la vita, mi potete aiutare per favore? Grazie a tutti.
    Ultima modifica di Aleandro23; 16-01-2017 a 14:58

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Aleandro23 Visualizza il messaggio
    "Scrivere la funzionepublic static <E>Iterable<E> selectLeaves(Tree<E> T, int k ) che restituisce una collezione iterabile delle fogli dell’albero a profondità k."
    Iterable è solo una interfaccia che descrive la capacità di saper fornire un Iterator. Qualunque classe che deriva da Collection, è Iterable.
    Quindi devi anche scegliere quale implementazione usare. Hai avuto suggerimenti o imposizioni a riguardo? ArrayList? LinkedList? Altro?

    Quote Originariamente inviata da Aleandro23 Visualizza il messaggio
    Come faccio a scorrere l'albero?
    Dipende da come è fatta la classe Tree e da cosa offre come metodi. Mostra come è fatta (almeno a grandi linee) o che metodi esattamente espone.
    selectLeaves è da inserire in Tree o in un'altra classe?

    Quote Originariamente inviata da Aleandro23 Visualizza il messaggio
    Avevo pensato di fare un for che partisse dal nodo root fino a k e usare la funzione children(p) che data una posizione restituisce una collezione iterabile dei figli di p, ma non so proprio come gestire il tutto.
    La scansione in "profondità" la si può fare sfruttando la ricorsione.

    Inizia comunque a precisare come ho detto sopra.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ti allego i file java che implementano la classe tree. La funzione selectLeaves deve essere inserita in un'altra classe.
    File allegati File allegati

  4. #4
    Praticamente c'è la classe TreeNode che memorizza al suo interno l'elemento del nodo, il nodo padre e i figli con una lista linkata. Questa la sua interfaccia:

    codice:
        public void setElement(E o);
        public PositionList<Position<E>> getChildren();
        public void setChildren( PositionList<Position<E>> c );
        public TreePosition<E> getParent();
        public void setParent(TreePosition<E> v);

    Poi c'è la classe LinkedList e questa è la sua interfaccia:

    codice:
        /** Restituisce il numero di nodi dell'albero. */
        public int size();
        /** Restituisce un valore che specifica se l'albero è vuoto. */
        public boolean isEmpty();
        
    
    
        /** Restituisce una lista iterabile dei nodi memorizzati nell'albero. */
        public Iterable<Position<E>> positions();
        
        /** Sostituisce l'elemento memorizzato nel nodo v con e. */
        public E replace(Position<E> v, E e) throws InvalidPositionException;
        
        
        /** Restituisce la radice dell'albero. */
        public Position<E> root() throws EmptyTreeException;
        /** Restituisce il padre di u n determinato nodo. */
        public Position<E> parent(Position<E> v) throws InvalidPositionException, BoundaryViolationException;
        /** Restituisce una lista iterabile dei figli di un nodo. */
        public Iterable<Position<E>> children(Position<E> v) throws InvalidPositionException;
        
        
        /** Restituisce u n valore che specifica se u n dato nodo è interno. */
        public boolean isInternal(Position<E> v) throws InvalidPositionException;
        /** Restituisce un valore che specifica se u n dato nodo è esterno. */
        public boolean isExternal(Position<E> v) throws InvalidPositionException;
        /** Restituisce un valore che specifica se u n dato nodo è la radice dell'albero. */
        public boolean isRoot(Position<E> v) throws InvalidPositionException;
    Ultima modifica di LeleFT; 17-01-2017 a 10:17 Motivo: Aggiunti i tag CODE

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 © 2025 vBulletin Solutions, Inc. All rights reserved.