-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path03.php
121 lines (61 loc) · 2.35 KB
/
03.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?php
// Реализовать класс дерева, наследующийся от абстрактного Tree:
class Node
{
private $name;
function __construct($name)
{
$this->name = $name;
}
}
abstract class Tree
{
// создает узел (если $parentNode == NULL - корень)
abstract protected function createNode(Node $node,$parentNode=NULL);
// удаляет узел и все дочерние узлы
abstract protected function deleteNode(Node $node);
// один узел делает дочерним по отношению к другому
abstract protected function attachNode(Node $node,Node $parent);
// получает узел по названию
abstract protected function getNode($nodeName);
// преобразует дерево со всеми элементами в ассоциативный массив
abstract protected function export();
}
// Обеспечить выполнение следующего теста:
// 1. создать корень country
$tree->createNode(new Node('country'));
// 2. создать в нем узел kiev
$tree->createNode(new Node('kiev'), $tree->getNode('country'));
// 3. в узле kiev создать узел kremlin
$tree->createNode(new Node('kremlin'), $tree->getNode('kiev'));
// 4. в узле kremlin создать узел house
$tree->createNode(new Node('house'), $tree->getNode('kremlin'));
// 5. в узле kremlin создать узел tower
$tree->createNode(new Node('tower'), $tree->getNode('kremlin'));
// 4. в корневом узле создать узел moscow
$tree->createNode(new Node('moscow'), $tree->getNode('country'));
// 5. сделать узел kremlin дочерним узлом у moskow
$tree->attachNode($tree->getNode('kremlin'), $tree->getNode('moscow'));
// 6. в узле kiev создать узел maidan
$tree->createNode(new Node('maidan'), $tree->getNode('kiev'));
// 7. удалить узел kiev
$tree->deleteNode($tree->getNode('kiev'));
// 8. получить дерево в виде массива, сделать print_r
print_r($tree->export());
/**
результатом последнего пункта должен быть следующий вывод в STDOUT:
Array
(
[country] => Array
(
[moscow] => Array
(
[kremlin] => Array
(
[house] =>
[tower] =>
)
)
)
)
*/