Помогите, два дня уже мучаюсь, не пойму как перебрать дерево: с неограниченным числом вложений, без рекурсии и без ООП. Просто циклами. У кого есть алгоритм, напишите пожалуйста.
$massive[2]["id"] = 2;
$parentNosology[] = 2;
$childNosology = [];
while($childNosology != NULL){
foreach($parentNosology as $keyNosology => $valueNosology){
$childNosology[] = $this->cicleFree($valueNosology);
$massive[$valueNosology]["children"] = $childNosology[0];
}
unset($parentNosology);
foreach($childNosology as $keyChild => $valueChild){
foreach($valueChild as $k => $v){
if($v["id"] != NULL)
$parentNosology[] = $v["id"];
}
}
unset($childNosology);
}
public function cicleFree($nosologyMassive)
{
$nosologyParent = $this->_database->query("SELECT `code` FROM `md_nosology` WHERE `parent_code` = ".$nosologyMassive);
foreach ($nosologyParent as $key => $value) {
$allNosolog[$value["code"]]["id"] = $value["code"];
}
return $allNosolog;
}
Обход бинарного дерева по уровням с использованием очереди:
//начали с корня
queue.insert(root);
while (queue is not empty) {
node = queue.extract;
обработать node;
if (node.left <> Nil)
queue.insert(node.left);
if (node.right <> Nil)
queue.insert(node.right);
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости