私は配列[3,18,15,25,26]
を持っているとします。可能なバイナリ検索ツリーはいくつありますか?ソートされた整数配列が与えられた場合、バイナリ検索ツリーはどのようにそれから形成できますか?
答えて
MicSimがリンクしている質問を見ても、私はまだそれに満足していなかったので、私はそれを自分で見始めました。ここで私が思いついたのは...
各ツリーは、親ルートノードを持つ2つのツリーと考えることができます。 2つの子ブランチの可能な組み合わせの数が別々に分かっている場合、そのルートノードを持つ合計の組み合わせは子の組み合わせの積です。
最初に低いカウントインスタンスを解決することで、より高いカウントソリューションを構築することができます。
C(n)
を使用して、n個のノードの可能な組み合わせの総数を表すカタロニア数を表します。
がうまくいけば、これら二つは明白です:
C(0) = 1
C(1) = 1
C(2)もかなり明白であるが、それは構築することができ、その者はそれをやらせます。ルートノードを選択する方法は2つあります。 1つは子カウント(左:右)を1:0
とし、もう1つは0:1
です。したがって、最初の可能性はC(1)*C(0) = 1*1 = 1
です。 2番目はC(0)*C(1) = 1*1 = 1
です。それらをまとめて合計すると、私たちは
まだエキサイティングです。今度は3つのノードを作ってみましょう。ルートノードと3つの子グループを選択する3つの方法があります。可能なグループは2:0
,1:1
および0:2
です。
我々の以前の定義に基づいて、C(3)
はC(2)*C(0) + C(1)*C(1) + C(0)*C(2) = 2*1 + 1*1 + 1*2 = 2+1+2 = 5
と書くことができます。
C(3) = 5
4ノードが3:0
、2:1
、1:2
と0:3
の子グループを有しています。したがって、C(4)
はC(3)*C(0) + C(2)*C(1) + C(1)*C(2) + C(0)*C(3) = 5*1 + 2*1 + 1*2 + 1*5 = 5+2+2+5 = 14
と書くことができます。
C(4) = 14
うまくいけば、2つのことが明らかになるであろう。まず、これはかなり早く煩雑になり始めます。第二に、私が説明したことは、かなり長い風に、wikiページの反復関係表現です。
これが役立つかどうかわかりませんが、運動を進めるのに役立ちましたので、分かち合うと思いました。私は開始時に再発関係を再現しようとしていなかったので、私の結果は既存の方法の1つと一致しました。
説明のためにThanx。それは確かに役に立つものでした。 – Rahul
ありがとうマイク..本当に助かった。私はこの質問に立ち往生した。この説明の後、私はこのソリューションを実装することができます。 –
@AmberBeriwal - 私はいつも問題を基本部分に分解するのに役立つことが分かっています。あなたにはうれしかったのでうれしいです。 :) – JerseyMike
N個のキーで作成できるバイナリ検索ツリーの数は、N番目のcatalan numberで与えられます。
アレイのノードのいずれかが、BSTのルートであってもよいが、各ルートのために、別個の探索木の数は左の組合せ(製品)と右部分配列。だから、
BSTCount(0) = 1
BSTCount(n) = sum_{i = 1}^{n} BSTCount(i-1) * BSTCount(n-i)
あなたが最初の数nにこの機能を評価して、閉じた形を見つけるためにOn-Line Encyclopedia of Integer Sequences™ (OEIS)順序を調べることができます。
- 1. ソートされた配列をバイナリ検索ツリーに挿入する
- 2. 与えられた数列のためのユニークなバイナリ検索ツリーはありますか?
- 3. 与えられた配列(JavaScript)から生成された素数の配列
- 4. 与えられた数が整数かどうかを検出するには?
- 5. Re:バイナリ検索ツリーと数字が与えられていると、ノードのデータが与えられた番号に追加されたパスを見つける
- 6. レコードの配列が与えられた場合、それぞれのフィールドを表す配列を取得するにはどうすればよいですか?
- 7. 配列が与えられます。与えられた配列から一意の数値を返します
- 8. ソートされた配列でのバイナリ検索
- 9. どのようにさらにツリー与えられた減速のために
- 10. 例えば、整数のジャグ配列与えられた値
- 11. 与えられたビット数が設定された整数からバイトへ
- 12. バイナリ検索ツリーと数字が与えられた場合、そのノードのデータが与えられた番号に追加されたパスを見つけます。
- 13. Recursivleyバイナリ検索ツリーが完成したかどうかのテスト
- 14. 与えられた文字列値の "around"行をどのようにして検索できますか?
- 15. ツリーが複数のマシンに分散されている場合、バイナリツリーはバイナリ検索ツリーですか?
- 16. 変更されたバイナリ検索配列
- 17. 文字列からバイナリ検索ツリーを作成するには?
- 18. ユーザー名とパスワードが与えられた場合、そのユーザーをどのように偽装しますか?
- 19. ソートされた配列からなるソートされた配列をソート
- 20. その値が与えられた数
- 21. 任意の点の集合を与えられた場合、それらの点を含むジオフェンスはどのようにして決定されますか?
- 22. バイナリ検索ツリーから文字列へ
- 23. ツリーのバランスが取れている場合、バイナリ検索ツリーで検索する時間の複雑さはどのくらいですか?
- 24. どのようにC言語で整数の配列からバイナリ検索ツリーを構築することができますか?
- 25. 多次元配列への座標のインデックスが与えられたら、それらの座標はどのように計算できますか?
- 26. Python 3バイナリ検索でソートされた変数(数値のリスト)
- 27. 与えられた場所の整数がそのリスト内の他のすべての整数よりも大きいかどうかをチェックする方法?
- 28. 弾性検索:この文書が与えられた文字列配列
- 29. ソートされた配列が与えられた場合、O(n^2)のすべてのペアの合計の並べ替えられた配列を作成できますか?
- 30. 式ツリーが与えられたときに文字列式を作成する
その宿題はありますか? – Baz
あなたは*バランス* BSTをお探しですか? –
:)いいえ、それは宿題ではありません。そして、それはバランスのとれたBSTではありません。 – Rahul