PHP Arbre Binaire de Récursivité Algorithme

Je veux créer un PHP récursive programme à l'aide d'un Arbre Binaire et la Récursivité.

Je veux imprimer l'arbre binaire de niveau en niveau, en utilisant la récursivité. Je veux répéter à travers l'arbre, pousser le noeud dans une table de hachage qui a le niveau que le point de référence.

Voici ce que j'ai à ce jour:

$binary_tree = array(array(1 => array(2 => array(4,5),4=>array(5,6))));

            1
            |
    ------------------
    |                |
    2                4
    |                |
----------        ----------
|        |        |        |
4        5        5        6

Et le résultat final devrait ressembler à ceci:

$data[0] = array(1);  
$data[1] = array(2,4);  
$data[2] = array(4,5,5,6);  

Je peux facilement faire une boucle à travers la matrice et imprimer les chiffres, qui sont le niveau d'(l'index du tableau).

Voici la fonction, ce qui est faux, mais ma première photo:

function recurse_tree($data,$level=0){
    $final = array();
    $tmp = array()
    //first check if data is array
    if(is_array($data)){
        //loop through data 
        foreach($data as $elm){
            //push data to the tmp array
            $tmp[] = recurse_tree($elm,$level+1);
        }
        //not an array
    } else {
            //push data to the final array. can we push to the tmp array.
            array_push($final[level],$elm);
    }
    //merge final and tmp array and return
    return ($final + $tmp);
 }

Je ne suis pas trop expérimenté avec la récursivité, ni la résolution de problème, j'ai donc écrit les étapes ci-dessous qui sont en cours. Le problème que j'ai maintenant c'est que sur l'étape 9 j'ai un doute comment gérer les touches 2 et 4, et enfin de gérer le nœud racine de la clé 1. Aussi, quand j'arrive à les étapes 5 à 8, im au niveau 4, ce qui est correct, cependant, selon l'arbre, son niveau 2.

$flattened_tree = recurse_tree($data);
//STEPS:  
1./ called recurse_tree  
data: array(array(1 => array(2 => array(4,5),4=>array(5,6))));  
level: 0  
final:  array();  
tmp:  array();  
2./ called recurse_tree:  
data: array(1 => array(2 => array(4,5),4=>array(5,6)));  
level: 1  
final: array();  
tmp: array();  
3./ called recurse_tree:  
data: array(2 => array(4,5),4=>array(5,6));  
level: 2
final: array();  
tmp: array();
4./ called recurse_tree:
data: array(4,5)
level: 3
final: array();  
tmp: array();
5./ called recurse_tree:
data: 4
level: 4
final: array(4 => 4)
tmp: array()
6./ called recurse_tree:
data: 5
level: 4
final: array(4 => 5)
tmp: array(4 => 4)
7./ called recurse_tree:
data: 5
level: 4
final: array(4=> 5)
tmp: array(4 => array(4,5))
8./ called recurse_tree:
data: 6
level: 4
final: array(4 => 6)
tmp: array(4 => array(4,5,5))         

Quelle est la meilleure façon de mettre en œuvre un Arbre Binaire de récursivité algorithme?

InformationsquelleAutor jkushner | 2011-02-16