codice:
id  |  Nome  |  id_figlio (indica di chi è figlio)
id_figlio è una chiave esterna che si riferisce all'id (quindi alla tabella stessa).

per recuperare la struttura dell'albero devi farti PER FORZA una FUNZIONE ricorsiva, es.:

codice:
' la funzione recupera (l'argomento è un'id) tutti i figli 
'di quell'id e a sua volta discendenti dei discendenti, 
'dato che è ricorsiva (provare per capire)

Function getTree(id)
  rsGetTree.Open("select * from tabella WHERE id_figlio =" & id)
  while NOT rsGetTree.EOF
    getTree(rsGetTree.("id"))
  wend
  rsGetTree.close
End Function

' ciclo tutti i capostipiti
rs.Open("select * from tabella WHERE id_figlio = 0")
  while NOT rs.EOF
    getTree(rs.("id"))
  wend
rs.Close
i capistipite, cioè coloro che non sono figli di nessuno (non perchè siano figli di mignotta, ma perchè non è possibile stabilire la discendenza, DEVONO avere id_figlio = 0)

spero che il codice sia grossomodo giusto, se decidi di provare e hai problemi sono qui.