スレッドバイナリツリーは、再帰またはスタックを通過する必要がないため、効果的です。私が疑問に思っているのは、挿入するすべてのノードが再びスレッド化されなければならないため、すべての挿入には、O(n)(nはツリー内のノードの数)私が正しいとすれば、スレッド化されたバイナリツリーは実際には効果がありませんか? Wikipedia articleとしてスレッドバイナリリードに挿入すると、O(n)時間の複雑さが生じますか?
答えて
は言う:
「バイナリーツリーが は、通常(それが存在する 場合)ノードのINORDERの後継者にヌル点となり、すべてのであろうと、すべての右の子ポインタを作ることによって通されます左の子ポインタは通常ヌルであるだろう ノードのinorder先行者を指し示す。
ここでのキーは、「通常はnullです」ということです。
通常、スレッドリンクのフィールドを追加するか、またはビットフラグを使用して、左右のノードが子ノードか、inorderの後継ノード/前ノードかを判断します。
内部ノードポインタは依然として従来の左右のバイナリツリーノード参照であるため、標準再帰検索を使用してO(log n)時間内に挿入箇所を見つけることができます。
@ jim-mischel –
@shivaRありがとうございました:あなたの質問に答えた場合は、それを合格とマークしてください。 –
受け入れる方法? :( –
- 1. なぜ配列挿入の時間複雑さはO(n)で、O(n + 1)ではないのですか?
- 2. 時間Oの複雑さ(n(nはをログ)ログ)+ nはO(L)
- 3. 時間複雑度がO(sqrt(n)* log(n))のアルゴリズムはありますか?
- 4. 2^N配列の挿入ソートの時間の複雑さ?
- 5. 複雑さO(log(n))はO(sqrt(n))と等価ですか?
- 6. ハッシュテーブル操作の時間複雑度はO(1)またはO(N)ですか?
- 7. 時間の複雑さn ^(O(k))は何を表していますか?
- 8. O(n log n)の複雑さでLinkedListに降順で値を挿入する方法はありますか?
- 9. O(n)時間の複雑さを持つN-queenについての説明?
- 10. mergesortの複雑さO(nlogn)+ O(n)?
- 11. バイナリツリーO(n)のInOrder Treeトラバーサルの時間複雑度?
- 12. 次のコードの時間複雑度はどのようにO(n)ですか?
- 13. O(1)、O(n log n)、O(log n)の複雑さを持つアルゴリズムの例
- 14. 特定のアルゴリズム - 複雑さはO(N)
- 15. Count(A、B、n)アルゴリズムのBig-O(O(n))およびBig-Omega(Ω(n))時間の複雑度
- 16. 次のコードの時間複雑さがなぜO(n^2)になるのですか?
- 17. O(fib n)複雑アルゴリズム?
- 18. o(n^2)の代わりにo(log n)またはo(n)の時間複雑度を持つようにこのコードを修正する方法
- 19. アルゴリズムの時間複雑度 - nまたはn * n?
- 20. ループ内でのRBツリーの挿入時間の複雑さ
- 21. 時間の複雑さと
- 22. AVLツリーは複雑にO(n)で構築できますか?
- 23. この関数の時間複雑度はO(1)ですか?
- 24. 入力のエンコーディング(時間の複雑さ)
- 25. 衝突検出にO(n^2)の複雑さを避ける
- 26. なぜビーズソートはO(n)の理論上の時間複雑さを持たないのですか?
- 27. 1つのstd :: vectorオブジェクトがスタックにあり、もう1つがヒープにある場合、vectorのスワップ関数の時間複雑さはO(1)かO(n)か?
- 28. 再帰的探索Big O時間の複雑さ
- 29. O(N)時間とO(C)空間の複雑さでJava 8ストリームAPIを使用してリストからmax(min)を1つだけ削除する方法
- 30. は、このアルゴリズムの漸近時間の複雑さです。O(log n)? Pを見つける
いいえ。挿入スポットを見つけるために、ツリーを再帰的にトラバースすることはできます。あなたのツリーが均衡していると仮定して、挿入はO(log n)のままです。 –
並行処理を提供するとき、多くのライブラリがツリーを回避します。明白な例はjavaの[ConcurrentSkipListSet](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentSkipListSet.html)です。 – amit