Newsgroup: it.comp.lang.visual-basic
Titolo: Struttura ad albero

Dovrei creare una struttura ad albero utilizzando fondamentalmente dei
"cicli" if-else. Mi spiego: ho un certo numero di oggetti che
gerarchicamente devo far distribuire in una struttra ad albero che rispetti
determinate condizioni!!
non so se sono stato chiaro....da dove posso iniziare? grazie!

 da dove posso iniziare? grazie!
Il suggerimento canonico è quello della collection.
Ti crei una collection e aggiungi o togli rami di albero con il sistema
della lista linkata (singolarmente o doppiamente, dipende da cosa devi
farci).
Praticamente gli oggetti della collection devono anche esporre tra le
proprietà il codice del figlio e eventualmente del padre. Questo ti permette
la classica gestione ad albero linkato.
L'applicazione più comune è quella del b-tree che serve per effettuare
ricerche veloci in liste ad albero ordinate alfabeticamente tramite la
gerarchia. E' in pratica lo stesso ragionamento che sta alla base della
teoria usata per costruire gli indici nei database.
Il problema nei b-tree è tenerli bilanciati mentre li si costruiscono o ci
si lavora, ma anche qui c'è una ben codificata teoria che spiega come fare.
Magari se spieghi cosa vuoi ottenere esattamente, ti si può aiutare meglio.
Ciao
*Roby*

Ciao,
vorrei chiedervi qual'è la tecnica migliore per memorizzare una struttura ad
albero in VB?
Grazie
Fabio

Fabio
--------------------------------
Inviato via 
http://usenet.iol.it
 

 albero in VB?
Senza puntatori? Non credo proprio sia possibile.
Penso che l'oggetto Collection possa sostituire l'albero abbastanza bene
comunque... IMHO.
Ignazio

 comunque... IMHO.
Esatto.
Io sono riuscito a sumulare l'albero con due collection parallele:
Coll1: elenco di tutti i nodi
Coll2: elenco dei genitori per ogni item di Coll1
quindi per aggiungere un nodo con relative parentele
Se Coll1.Item(NomeNodo) NON esiste
    Set Coll2 = New Collection
    ' elenco di tutti i genitori
    Coll2.Add NomeGenitore, NomeGenitore
    ...
    Coll1.Add Coll2, NomeNodo
altrimenti
    se Coll1.Item(NomeNodo) non contiene NodoGenitore
        Coll1.Item(NomeNodo).Add NodoGenitore, NodoGenitore
So che logicamente sarebbe più corretto aggiungere per ogni nodo l'elenco
dei figli piuttosto che dei genitori, ma così posso gestire anche alberi con
nodi che hanno più di un genitore.
Ciao

 albero in VB?
crei una classe che rappresenta la tua struttura (la classica che si usa in
altri linguaggi per queste cosa) e  poi la allochi dinamicamente
modulo classe struttura
public  dati,padre,figlio
sono variant perciò le potrai associare a quello che ti pare :))
ciao

 comunque... IMHO.
Sì, però le collection sono lente a crearsi, occupano molta memoria e sono
lente anche a deallocarsi.
In pratica, vanno bene se l'albero è piuttosto piccolo.
Saluti,
Luca Barbetta kck/skd

 albero in VB?
Essendo VB un linguaggio a oggetti, direi che utilizzare le classi sia il
modo migliore.
Sostanzialmente, crei una classe denominata Classe_Elemento, con le
proprietà Elemento_Padre, di tipo Object, e Elementi_Figli, di tipo
Collection.
Quando crei un nuovo elemento, figlio dell'elemento X, fai:
Set Nuovo_Elemento = New Classe_Elemento
Set Nuovo_Elemento.Elemento_Padre = X
Call Nuovo_Elemento.Elemento_Padre.Elementi_Figli.Add Nuovo_Elemento
All'inizio ti conviene creare un oggetto Radice, sempre di tipo
Classe_Elemento, a cui fai puntare gli elementi del primo livello.
Il grosso vantaggio della classe è che puoi creare metodi e proprietà del
tipo:
Elimina_Rami_Sottostanti
Conta_Rami_Sottostanti
Somma_Rami_Sottostanti
Esporta_Su_File_Rami_Sottostanti
Trova_Elemento (byval Indizio as string/double)
Ciao
Alberto

 albero in VB?
Solo due giorni fa ho risposto ad un messaggio di un certo Ascanio che
poneva la tua esatta domanda.
Vai su 
http://www.deja.com
 e cerca "Struttura ad albero" e Piazzolla e lo
trovi subito.
Ciao
*Roby*