私はかなり大きなツリーデータ構造を持っています(ノードの削除や追加など)。私は、すべてのノードを(7のような特定の幅の深さまで)訪問し、それをリストに入れる、幅広い最初のアプローチを使用してツリーを走査しなければなりません。次に、関数はノードをループし、情報がリストの内部にある場合はtrueを返します。最速のツリートラバーサル
これは、ノードをループするのに多くの時間がかかります。私はすべての単一のノードをすべての単一の子ノードにマップしてから、辞書を使用してノードをプルし、そのすべての子を(再帰的に)取得する必要があるとは思わない。私はこれをどのようにするべきですか?最速の方法は
Dictionary<Node, List<Node>>
- ノード、すべての子のリスト(子供たちの子供を含む...)のように、互いの間のすべてのノードをマップすることで、その後のノードを引き、そのような2,000人の子供速い取得します。しかし、ノードがどこにでも追加または削除された場合、すべての辞書ノードを更新する必要があります(これは面倒なようです)。もう1つの方法は、実行中に動的にループすることです(時間がかかります)。これは、ツリーの生成中、または実行時にループする間に、すべてを最初から一緒にマッピングすることです。
この状況を処理する最善の方法は何ですか?任意のアイデア、ポインタ、コメント、任意のものが役立ちます。現在のところ、この操作にはプログラム実行時間の約25%が必要です。
ツリー内のノードに特定の順序がありますか? –
なぜあなたは 'Dictionary>'を持っていて、node.ChildNodesやそれらの行に何かがないのですか? –
Alxandr
AdamS - いいえツリーに順序がありません。これは、1対多の関係です。私がツリーを作成するとき、ノードをより速く見つけるために、「バイナリ検索ツリー」のようなノードを作成することについて賢明でなければなりませんか?私がノード3-4の子供を深く見つけているときに問題があると思われますが、中間のノードは彼らの子供が何であるかを何ら指示するものではありません。例えば。ルートノード - 23、1子 - 85 - その子 - 3921 - その子 - 39222.ルートノード "23"から39222を見つけようとしている場合、中間の子供はまったく異なっています(85,3921)。それはそれが見えるトリッキーになる? – iefpw