Мне трудно написать функцию обхода, которая выводит родительские узлы дочернего узла.
Взгляните на пример b-дерева
Вот пример набора данных, который я использую:
$nodes = array(
array('f','b'),
array('f','g'),
array('b','a'),
array('b','d'),
array('g','i'),
array('d','c'),
array('d','e'),
array('i','h')
);
Я пытаюсь вывести массив results
, содержащий все массивы дочерних узлов, которые содержат родительские ассоциации.
Пример выходных данных:
- родители узла (d) - (b,f)
- родители узла (c) (d, b, f)
- родители узла (h) (i, g, f)
Я не могу понять, как пройти мимо прямого родительского узла.
foreach($nodes as $node){
//CHECK IF NODE EXISTS
if(array_key_exists($node[1],$results)){
//DO NOTHING
array_push($results[$node[1]],$node[0]);
}
else{
//CREATE NEW CHILD ARRAY
$results[$node[1]] = [];
//PUSH PARENT INTO CHILD ARRAY
array_push($results[$node[1]],$node[0]);
}
}
foreach($results as $k => $v){
echo "child[$k] parents(" . implode($v,', ').")" ;
echo "</br>";
}
Вопрос: как добиться этого результата наиболее эффективным способом?