0

要件に適した特定のデータとツリーデータ構造を構築する必要があります。
番号から親を追跡できるように、各ノードに特定の番号を割り当てる必要があります。これらの数値をキーとして格納するためにハッシュテーブルを使用する予定であるため、重複する値はありません。

例えば

parent - 000001
  child1 - 000011
    innerchild1 - 000111 (レベル 2、右から 2 ビットを取得すると、親に到達できます)
    innerchild2 - 000211
  child2 - 000021
    innerchild1 - 000121
    innerchild2 - 000221

レベルに応じて、特定のビットをマスクして、親を一意に識別できます。しかし、ツリーが大きくなると (親が増えると、数字が重複します)、この問題を解決するにはどうすればよいでしょうか?

4

4 に答える 4

0

キーとして「明確に定義された」数値で十分だとは思いません。

parentId / parent Nodeを簡単に取得するには、要件に合わせてツリー構造を設計するか、少なくともNodeクラスを設計する必要があります。

例えば

Node{
 id, #could be string, number, unique
 actualNode # you node value
 parentId (or Node parentNode )
}

何らかの理由でハッシュテーブルに固執する場合でも、node.idをキーとして使用できます。一意の文字列、数字を生成する方法はいくつかあります。例:現在のナノ秒..。

于 2012-06-11T12:29:34.720 に答える
0

1 から 9 までの数字を使用することをお勧めします。

なぜNo-0なの?先頭に 0 がある 9 桁の数字は、先頭に 0 がない 8 桁のように見えます。エラーの原因になります。

したがって、いずれかの親が最大 9 人の子を持つまで、構造は十分です。

番号 0 - 共通ルート
1-9 - 最初の子
11-19 - 最初の子の第 2 世代の子...
など

9 桁を超えるノードがある場合は、100 ベースの算術演算を使用します。(許可される数字は 10 ~ 99 です)。99人の子供で十分ですか?そうでない場合は、100-999 を使用します。

于 2012-06-11T12:09:13.663 に答える
0

ネストされた集合ツリーを使用して問題を解決できます。下記の本を参考にしてください。Nested Set ツリーに関するテキストも含まれている、すばらしい本です。

http://www.elsevier.com/wps/find/bookdescription.cws_home/702605/description

于 2012-06-11T12:09:20.247 に答える
0

ノードに「特別な」番号を割り当てるというあなたのアプローチは、悪いもののように聞こえます。多くのハードワーク、スケーラビリティの制限、そして何よりも...バグにつながる可能性があります。

親ノードが何であるかを知る必要がある場合は、ノードのフィールドに親ノードへの参照を保存してください!

于 2012-06-11T12:14:50.620 に答える