Newsgroup: it.comp.lang.visual-basic
Titolo: Ri-passo concettuale del problema dell'albero

Salve boys,
Allora.
Vi dico a che punto sono arrivato, così ci capiamo :)
La routine deve essere fatta così( a livello concettuale,
infatti, non fa una piega ):
01) Se non ho creato il nodo radice,
02) Creo il nodo radice
03) Salvo la chiave
04)Ricorro a sinistra
05) Ricorro a destra
06) Se ho già creato il nodo radice
07) Se il livello salvato è uguale a quello passato nel parametro, il nodo
sarà di tipo fratello
08) Altrimenti sarà di tipo figlio
09) creo un nuovo nodo, basato sulla chiave salvata
10) Salvo la chiave del nodo appena creato
11) Ricorro a sinistra
12) Ricorro a destra
Vi trovate col ragionamento?
Idee?
Andrea

[CUT]
questo č un link dove puoi trovare informazioni
concettuali sugli algoritmi che ti interessano,
almeno credo :-)
http://www.diit.unict.it/users/scava/fdi_dispense.html
--
bye BlackMagic
ICQ# 85485468


 A proposito ma tu vuoi fare un albero binario semplice o un heap?
L'albero binario ho un ordinamento figlio sin < padre <figlio dex
Un heap ha ordinamento  : padre maggiore dei figli...

 Un heap ha ordinamento  : padre maggiore dei figli...
Qui NON E' un problema di inserimento, questione della quale mi sono GIA'
occupato.
Devo trasporre l'albero in un treeview, ma il sistema VB di gestione dei
treeview è
UNA CACCA!
Mi sto dannando da non so quanto tempo e per ogni macello che risolvo,
ne escono fuori altri 500!!!!!!!!
Non gliela fò più!!!!!!!!!
Andrea

UNA CACCA!
La treeview gestisce alberi con relazioni padre-figli.
Punto.
-- 
ciao, hal

 UNA CACCA!
Il treeview ha tutto quello che ti serve, ma come ha detto hal, lavora per
parentela (non necessariamente solo padre-figlio, ma e' quella a lui piu'
"naturale"), non per livelli di profondita'
Una volta entrati in questo ordine di idee, la tua routine di generazione
dell'albero diventa molto semplicemente questa (vedi altro thread con il tuo
esempio)
Public Sub BuildTree(ByRef Nodes As MSComctlLib.Nodes, _
                    ByRef aNode As TreeNode, _
                    Optional ByVal aParentKey As String)
If Not (aNode Is Nothing) Then
    If Len(aParentKey) = 0 Then
        'caso particolare del nodo radice
        Nodes.Add , , aNode.Key, aNode.Caption
    Else
        Nodes.Add aParentKey, tvwChild, aNode.Key, aNode.Caption
    End If
    BuildTree Nodes, aNode.LeftNode, aNode.Key
    BuildTree Nodes, aNode.RightNode, aNode.Key
End If
End Sub
E' perfettamente autosufficiente, niente variabili a livello di modulo...
Tanto per provare, l'ho usata con una classe TreeNode fatta cosi':
Public Key As String
Public Caption As String
Public LeftNode As TreeNode
Public RightNode As TreeNode
Public Sub AddChildren()
Set LeftNode = New TreeNode
LeftNode.Caption = Me.Caption & ".L"
LeftNode.Key = LeftNode.Caption
Set RightNode = New TreeNode
RightNode.Caption = Me.Caption & ".R"
RightNode.Key = RightNode.Caption
End Sub
generando un albero di prova con:
Dim n As New TreeNode
n.Caption = "ROOT"
n.Key = n.Caption
'generiamo un albero di esempio...
n.AddChildren
n.LeftNode.AddChildren
n.LeftNode.LeftNode.AddChildren
n.LeftNode.RightNode.AddChildren
n.LeftNode.RightNode.LeftNode.AddChildren
n.RightNode.AddChildren
n.RightNode.LeftNode.AddChildren
n.RightNode.RightNode.AddChildren
n.RightNode.RightNode.LeftNode.AddChildren
n.RightNode.RightNode.RightNode.AddChildren
TreeView1.Nodes.Clear
BuildTree TreeView1.Nodes, n
Vedi un po' se ti garba...
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 Ciao
Ciao
Andrea
P.S. Tra un pò sarà pronta anche una per i files di testo.