0

スレッドバイナリツリーは、再帰またはスタックを通過する必要がないため、効果的です。私が疑問に思っているのは、挿入するすべてのノードが再びスレッド化されなければならないため、すべての挿入には、O(n)(nはツリー内のノードの数)私が正しいとすれば、スレッド化されたバイナリツリーは実際には効果がありませんか? Wikipedia articleとしてスレッドバイナリリードに挿入すると、O(n)時間の複雑さが生じますか?

+1

いいえ。挿入スポットを見つけるために、ツリーを再帰的にトラバースすることはできます。あなたのツリーが均衡していると仮定して、挿入はO(log n)のままです。 –

+0

並行処理を提供するとき、多くのライブラリがツリーを回避します。明白な例はjavaの[ConcurrentSkipListSet](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentSkipListSet.html)です。 – amit

答えて

1

は言う:

「バイナリーツリーが は、通常(それが存在する 場合)ノードのINORDERの後継者にヌル点となり、すべてのであろうと、すべての右の子ポインタを作ることによって通されます左の子ポインタは通常ヌルであるだろう ノードのinorder先行者を指し示す。

ここでのキーは、「通常はnullです」ということです。

通常、スレッドリンクのフィールドを追加するか、またはビットフラグを使用して、左右のノードが子ノードか、inorderの後継ノード/前ノードかを判断します。

内部ノードポインタは依然として従来の左右のバイナリツリーノード参照であるため、標準再帰検索を使用してO(log n)時間内に挿入箇所を見つけることができます。

+0

@ jim-mischel –

+0

@shivaRありがとうございました:あなたの質問に答えた場合は、それを合格とマークしてください。 –

+0

受け入れる方法? :( –

関連する問題