すべてのノードに送信ノードの事前決定セットがあるツリーがあるとします。レベル値が与えられたリーフノードの数を数えるための高速化/最適化を考え出すことは可能でしょうか?もし誰かが同じことをするためのアイデアやリンクやリソースを提案できれば素晴らしいだろう。ツリー内のリーフノードを数えよう
答えて
いいえ、あなたはまだツリー全体を走査する必要があります。ツリーの各ノードの子ノードの数だけから、正確な構造を予測する方法やそれを近似する方法はありません。
それ以外は、カウンタを保持して、挿入するたびに更新してください。より簡単で、葉の数をカウントすることを除いて、時間演算の複雑さは変わらないでしょう。これはO(1)
に縮小されます。
O(1)時間に葉ノードの '数'を計算する方法について簡単な擬似コードを提供できますか? –
@ N.M。私はすでに答えに書いています:ちょうど葉のカウンターを使用してください。私はこれに説明するコードは必要ないと思う。そして、コードはツリーのほぼ完全な実装になります – Paul
これは実際にはかなり厳しいものになる可能性があります。プログラミング言語の種類が異なるので、入力データ構造はツリーのバイナリまたは一般ツリー(任意の数の子)、ツリーのサイズです。
最も一般的な考え方は、ルートから始めてDFSまたはBFSを実行してすべてのノードレベルを取得し、各セットに単一レベルのノードが含まれるセットのリストを作成することです。セットは任意の構造にすることができます、標準的なリストは上手です。
パフォーマンスが必要な場合(Cより優れていても)、C++で作業しているとしましょう。
あなたが言及したように、一般的なツリーを持ち、入力構造が隣接リストであるとします。
//nodes are numbered from zero to N-1
vector<vector<int>> adjList;
次に、BFSまたはDFSのいずれかを実行します。いずれかの方法でツリーを作成し、各ノードのレベルを維持します。次のノードのレベルは、その親のレベルに1を加えたレベルです。
レベルを検出すると、ノードをこのように配置します。
vector<vector<int>> nodesPartitionedByLevels(nodeCount);
//run bfs here
//inside it you call
nodesPartitionedByLevels[level].push_back(node)
これはそれです。
レベルがある場合は、そのレベルのすべてのノードを反復し、任意のノードを競合する場合は隣接リストをチェックします。
adjList[node].empty()
を基本的に呼び出します。それよりも真の場合はリーフノードです。
- 1. Prologでbツリー内のすべての偶数を数えよう
- 2. SQLサーバーのツリー構造内のサブツリーの下にあるすべてのリーフノードを見つけよう
- 3. 親子ツリー構造のリーフノード行のみを取得する
- 4. Java - リーフノードの解析ツリー再帰を処理する方法は?
- 5. B +ツリー検索は、リーフノードのすべてのキーデータがメモリ内にあるバイナリ検索ツリー検索よりも優れたパフォーマンスを発揮できますか?
- 6. 複数のファイル内の出現回数を数えよう
- 7. バイナリ検索ツリーからすべてのリーフノードを削除する機能
- 8. パンダのデータフレーム内の特定の値の数を数えよう
- 9. B +ツリーのリーフノードにはいくつのキーがありますか?
- 10. ファイル内の大括弧の数を数えよう
- 11. 数式をツリー内のツリー/ .xmlに変換する方法
- 12. 配列内にない文字の数を数えよう
- 13. 与えられたツリーの葉の数を数える関数を書く
- 14. 与えられた配列内の逆位数を数えよう
- 15. 作業ディレクトリはツリー図のように見えますか?
- 16. ツリー内のジェネリック
- 17. jsonファイル内の特定のオブジェクトを数えよう
- 18. XSLTはツリー内の空のノードを置き換えません
- 19. フレックス - ツリーコンポーネント内のリーフノードをドラッグ可能にする
- 20. 木のようにDFSツリー
- 21. テキストファイル内の新しい行を数えよう
- 22. Pythonでリスト内のサブリストを数えよう
- 23. リンクリスト内のノード項目を数えよう
- 24. ルートノード、内部ノード、およびリーフノードをテーブルから取得しますか?
- 25. リーフノードまで特定のノードのすべての子ノードを見つけよう
- 26. Rubyを使用して段落内の文章の数を数えよう
- 27. ファイル内の整数の数はどのように数えますか? (C++)
- 28. ツリー内のBFS(レベルオーダートラバーサル)
- 29. そのノードのサイズを説明するためのB +ツリーのリーフノードのサイズこの写真で
- 30. 数字の長さを数えよう
各ノードに正確に 'd'の子があることを意味しますか? –
@SalvadorDaliは必ずしも –
です。それで、コードが実際に簡単なので、それを数える簡単な方法はありません(ツリー全体を見ずに簡単に意味する)。 –