それぞれサイズ N の 2 つのソートされていない配列が与えられた場合、それらから構築された二分探索木が等しいかどうかを判断します。
したがって、配列の要素が選択され、基本的な (バランシングなし、赤黒なし、何もない) 二分探索ツリーに挿入されます。直接 2 つの配列が与えられた場合、それらが同じ二分探索木を生成するかどうかを判断できますか。
明らかな O(N 2 ) の最悪の場合の時間の複雑さの解決策があります。2 つのツリーを構築し、それらの等価性を比較します。
これに対する O(N) または O(N log N) ソリューションはありますか?
私が抽出しようとしている問題のアイデアは次のとおりです。BST の構築は、要素の相対位置に依存します。たとえば、一方の配列の 20 のすぐ隣に値 51 の要素がある場合、ツリーが等しくなるためには、もう一方の配列に 20 と 51 の間に要素があってはなりません (そうでない場合、20 の右の子は 51 ではなくその数になります)。 )。
私はいくつかのアプローチを試しました:
- 単純なアプローチ: 2 つのツリーを作成して比較します。
- 配列を 2 つ (1 つの小さいサブ配列とピボットよりも大きい 1 つのサブ配列) に分割し、左の配列を左の子に再帰的に渡し、もう 1 つを右の子に渡す興味深い変形を使用しました。インプレースで生意気ですが、それでも O(N 2 ) です。
- 友人は、最長のサブシーケンスをそれに適用して見つけて比較しようとしましたが、それは正しくありません。
- おそらくLinkedHashMapで解決しようとしていましたが、その正しさを証明するのに苦労しています。
ヘルプ、およびこの問題を解決するためのヒントをいただければ幸いです。