【发布时间】:2011-04-14 04:45:55
【问题描述】:
我会尽量让自己清楚。基于邻接表模型: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。
我想这样做的原因是,我可以从原始树创建一个虚拟树,这将是我项目中另一个算法的基础。
提前致谢。
鲍勃
【问题讨论】:
标签: php modified-preorder-tree-t tree-balancing