Я хочу создать рекурсивную программу 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))
Каков наилучший способ реализации алгоритма рекурсии двоичного дерева?