Алгоритм рекурсии двоичного дерева PHP

Я хочу создать рекурсивную программу PHP с использованием двоичного дерева и рекурсии.

Я хочу распечатать уровень двоичного дерева по уровням с использованием рекурсии. Я хочу пройтись по дереву, вставить узел в хэш-карту, которая имеет уровень в качестве контрольной точки.

Вот что у меня есть на данный момент:

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

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

И конечный результат должен выглядеть следующим образом:

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

Я могу легко просмотреть массив и распечатать числа, соответствующие уровню (индекс массива).

Вот функция, которая неверна, но мой первый снимок:

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);
 }

Я не слишком разбираюсь в рекурсии и решении проблем, поэтому я написал следующие шаги, которые происходят. Проблема, с которой я столкнулся сейчас, заключается в том, что на шаге 9 я не уверен, как обрабатывать ключи 2 и 4, а затем, наконец, обрабатывать корневой узел, ключ 1. Кроме того, когда я перехожу к шагам 5-8, я на уровне 4 , что является правильным, однако, в соответствии с деревом, его уровень 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))         

Как лучше всего реализовать алгоритм рекурсии двоичного дерева?

5
задан Eric Leschinski 28 March 2014 в 17:52
поделиться