私が取り組んでいる AVL テンプレート (C++ テンプレート) の一部として、n1+n2 が両方のツリーの合計要素である場合、O(n1+n2) の複雑さで 2 つの AVL ツリーをマージしようとしていました。
次のアルゴリズムを考えました。
- 1 番目のツリーを順番にトラバーサルし、配列/リストを作成する - O(n1)
- 2 番目のツリーでの順序走査と配列/リストの構築 - O(n2)
- これら 2 つの配列の並べ替えをマージし、n1+n2 - O(n1+n2) のサイズで最終的に並べ替えられた配列/リストを作成します。
- n1+n2 頂点 - O(n1+n2) を持つ空のほぼ完全な二分木を構築します。
- マージされた配列/リスト内の要素で頂点を更新しながら、ほぼ完全な二分木を順番にトラバーサルします。
私の質問は、n1 + n2頂点を持つ空のほぼ完全なバイナリツリーを実際に構築するにはどうすればよいですか?