私はBalanced BST
に関する理論的な質問があります。パーフェクトバランスバイナリ検索ツリー
ノード2^k - 1
を持つPerfect Balanced Tree
を通常のunbalanced BST
から構築したいと考えています。私が考えることができる最も簡単な解決策は、並べ替えられたArray/Linked list
を使用して、配列をサブ配列に再帰的に分割し、そこからPerfect Balanced BST
を構築することです。
しかし、ツリーサイズが非常に大きい場合は、同じサイズのArray/List
を作成して、この方法で大量のメモリを消費する必要があります。
もう1つの選択肢は、要素ごとに要素を挿入し、ツリーバランス係数に応じてツリーをローテーションとバランスさせる回転機能を使用することです - 左右のサブツリーの3つの高さ。
私の疑問は、私の仮定について正しいのですか?不完全なBST
から完全なBST
を作成する他の方法はありますか?
大まかなツリーがあり、既存の構造をほとんど変更せずにツリーを変換したい場合は、回転関数の中には完璧な意味があります。 - 結果は本当に完璧にバランスを取らなければならないのですか?質問の背景は何ですか? – michas
はい、完全にバランスが取れている必要があります。これは学術プロジェクトの一部です。 「回転機能」とはどういう意味ですか?私が知る限り、実装が簡単な4つの回転関数があります。 – OlejkaKL
異なる種類のツリーは、わずかに異なる回転方法を使用します。たとえば、AVLと赤黒の木を比較します。 – michas