Created
July 18, 2015 19:32
-
-
Save tvitcom/731cf1bca766887ad2dd to your computer and use it in GitHub Desktop.
Ответ на первый тестовый вопрос: prentTree (рекурсия к дереву)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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