私はできるだけ自分自身を明確にするように努めます。隣接リストモデルに基づく: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 |
------------------------------------------------------
しかし、親を移動したり回転させたりせずに、これらすべてをバランスの取れたツリーに再編成する方法が必要です。データベースに複製テーブルを作成し、2番目のクエリを実行して別のBinarayツリーを表示または作成することは考えられますが、次のようなフラットツリーを再編成できる可能性があると思いました。
0
/ \
1 2
/ \ / \
3 4 5 6
/
7
左から右へ。0は、親またはsuper_parent0000を表します。
これを実行したい理由は、プロジェクトの別のアルゴリズムの基礎となる元のツリーから仮想ツリーを作成できるようにするためです。
前もって感謝します。
ボブ