Я постараюсь сделать себя максимально понятным.Основано на модели списка смежности: http://articles.sitepoint.com/article/hierarchical-data-database
Мне нужен способ сбалансировать это дерево
0
/ \
1 2
/ / \
3 4 5
\ \
6 7
примерно так:
0
/ \
1 2
/ \ / \
3 4 5 6
/
7
На основе примера кода:
<?php
function display_children($parent, $level) {
$result = mysql_query('SELECT title FROM tree '.
'WHERE parent="'.$parent.'";');
while ($row = mysql_fetch_array($result)) {
echo str_repeat(' ',$level).$row['title']."\n";
display_children($row['title'], $level+1);
}
}
?>
Я изменил код, чтобы он мог выводить плоскую HTML-таблицу следующим образом:
$ super_parent = '0000' левые записи узла в плоский список:
____________________________________________________
| No. | Date of Entry | Account ID | Placement|
------------------------------------------------------
| 1 | 2010-08-24 11:19:19 | 1111a | a |
| 2 | 2010-08-24 11:19:19 | 22221a_a | a |
| 3 | 2010-08-24 11:19:19 | 33_2aa | b |
| 4 | 2010-08-24 11:19:19 | 33_2Ra | a |
| 5 | 2010-08-24 11:19:19 | 22221a_b | b |
| 6 | 2010-08-24 11:19:19 | 33_2ba | a |
| 7 | 2010-08-24 11:19:19 | 33_2bb | b |
------------------------------------------------------
Но мне нужен способ реорганизовать все это в сбалансированное дерево без перемещения или поворота родителя.Хотя я могу подумать о создании дублирующейся таблицы в БД и выполнить второй запрос для отображения или создания другого дерева Binaray, я подумал, что возможно будет реорганизовать плоское дерево следующим образом:
0
/ \
1 2
/ \ / \
3 4 5 6
/
7
Изслева направо.0 представляет родительский или super_parent 0000.
Причина, по которой я хотел бы сделать это, состоит в том, чтобы я мог создать виртуальное дерево из исходного дерева, которое будет основой другого алгоритма в моем проекте.
Заранее спасибо.
Боб