我会尽量让自己清楚。基于邻接列表模型: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 代表 parent 或 super_parent 0000。
我想这样做的原因是我可以从原始树创建一个虚拟树,它将成为我项目中另一个算法的基础。
提前致谢。
鲍勃