Vu de loin, et sans porter d'attention plus que ça aux performances, j'aurais chargé les données de la base, et bouclé dessus en retirant de la liste les éléments qui sont insérés dans l'arbre tant que la liste n'est pas vide, sachant qu'évidemment lors des premiers tours de boucle plein d'éléments devront être sautés parce que leurs parents ne seront pas référencés.
monArbre= vide
maListeIssueDeSQL
tant que maListeIssueDeSQL n'est pas vide
element= maliste.removeFirstElement();
node= monArbre.find(element.parent)
if node trouvé
node.addChild(element)
else
maListeIssueDeSQL.pushback(element)
end
fin tant que