Den første nøgle er at sortere SQL-resultaterne efter antallet af forfædre. Jeg gjorde dette i PHP, da jeg undgår kompleksiteten af flercifrede tal.
Dette giver en liste over noder i en rækkefølge, som de gyldigt kan indsættes.
Array( [1] => Array ( [0] => 1 ) [4] => Array ( [0] => 4 [1] => 1 ) [2] => Array ( [ 0] => 2 [1] => 1 ) [3] => Array ( [0] => 3 [1] => 1 [2] => 2 ))
På dette tidspunkt er jeg ligeglad med nøglerne, kun lister over forfædre. Stien gennem træet kan findes mellem skæringspunktet mellem tilgængelige noder og de resterende forfædre.
funktion add_node($ancestors, &$tree) { if (count($ancestors) ==1) { $tree[array_pop($ancestors)] =array(); Vend tilbage; } $next_node =array_skæringspunkt($forfædre, array_keys($træ)); $this->add_node( array_diff($ancestors, $next_node) , $tree[array_pop($next_node)] ); }