Skip to content

Instantly share code, notes, and snippets.

@tvitcom
Created July 18, 2015 19:32
Show Gist options
  • Save tvitcom/731cf1bca766887ad2dd to your computer and use it in GitHub Desktop.
Save tvitcom/731cf1bca766887ad2dd to your computer and use it in GitHub Desktop.
Ответ на первый тестовый вопрос: prentTree (рекурсия к дереву)
<?php
/* Имеется дерево, каждый элемент которого представляет собой экземпляр
* объекта следующего класса
*/
class Item
{
public $value;
/**
* Содержит пары "название" => подэлемент.
* @var Item[]
*/
public $subItems = array();
public function __construct($value, array $subItems = array())
{
$this->value = $value;
$this->subItems = $subItems;
}
}
//=== Задача 1. Рекурсивный обход ===
//Задача сделать функцию, которая выводит список в виде дерева,
//выводя глубину и значение, форматирование - на примере:
$root = new Item(
10, array(
'sub1' => new Item(11),
'sub2' => new Item(12, array(
'sub3' => new Item(11),
'sub4' => new Item(15)
)),
'sub3' => new Item(18),
));
$root_small = array(
'sub1' => new Item(11),
'sub2' => new Item(12, array(
'sub3' => new Item(11),
'sub4' => new Item(15)
)),
'sub3' => new Item(18),
);
/* === Формат вывода ===
(уровень вложенности): (название) < br > */
/* === Пример вывода для списка из задачи ===
0: 10
1: 11
1: 12
2: 11
2: 15
1: 18
* */
function printTree($ob, $level=0) {
echo $level.' : '. $ob->value.'<br>';
//Обход всех имеющихся стволов дерева данного уровня
$level++;
//Обход для нахождения ветвей для текущего ствола:
foreach($ob->subItems as $val){
printTree($val,$level);
}
}
/* === Формат вызова функции ===
*/
echo "<pre>";
var_dump($root_small);
echo "printTree(func):<br>";
printTree($root);
echo "</pre>";
echo "<br>";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment