web-dev-qa-db-ja.com

'N'のノードがない場合、いくつの異なるバイナリおよびバイナリ検索ツリーが可能ですか?

バイナリツリーの場合:ツリーノード値を考慮する必要はありません。「N」ノードの異なるツリートポロジにのみ興味があります。

バイナリ検索ツリーの場合:ツリーノード値を考慮する必要があります。

68
siva

この記事 同僚のニック・パーランテ(まだスタンフォードにいた頃から)がお勧めです。構造的に異なるバイナリツリーの数(問題12)には、単純な再帰的な解決策があります(閉じた形式では、@ codekaの答えが既に述べたカタロニア式になります)。

構造的に異なるバイナリsearchツリー(略してBST)の数が「プレーン」バイナリツリーの数とどのように異なるかはわかりません。 「ツリーノードの値を検討する」ことで、各ノードがBST条件と互換性のある任意の数、異なる(ただしすべてではない構造的に異なる!-)BSTの数は無限です。私はあなたがそれを意味しているとは思わないので、例であなたがdoの意味を明確にしてください!

38
Alex Martelli
  1. バイナリツリーの総数は= enter image description![enter image description here

  2. Iを合計すると、n個のノードを持つバイナリ検索ツリーの総数が得られます。 enter image description here

基本ケースはt(0) = 1およびt(1) = 1です。つまり、1つの空のBSTがあり、1つのノードを持つ1つのBSTがあります。 enter image description here

したがって、一般に、上記の式を使用して、バイナリ検索ツリーの総数を計算できます。 Googleこの式に関するインタビューで質問を受けました。質問は、6つの頂点で可能なバイナリ検索ツリーの合計数です。答えはt(6) = 132です

私はあなたにいくつかのアイデアを与えたと思う...

72
Black_Rider

二分木の数は catalan number を使用して計算できます。

バイナリ検索ツリーの数は、再帰的なソリューションと見なすことができます。つまり、バイナリ検索ツリーの数=(Leftバイナリ検索サブツリーの数)*(Rightの数バイナリ検索サブツリー)*(ルートを選択する方法)

BSTでは、要素間の相対的な順序のみが重要です。したがって、一般性を失うことなく、ツリー内の個別の要素は1、2、3、4、....、nであると想定できます。また、BSTの数をf(n)for n elementsで表すとします。

ルートを選択するための複数のケースがあります。

  1. ルートとして1を選択します。no要素を左のサブツリーに挿入できます。 n-1要素は右側のサブツリーに挿入されます。
  2. ルートとして2を選択します。1要素は左側のサブツリーに挿入できます。 n-2要素は右のサブツリーに挿入できます。
  3. ルートとして3を選択します。2要素を左側のサブツリーに挿入できます。 n-要素は右側のサブツリーに挿入できます。

......同様に、ルートとしてのi-th要素の場合、i-1要素を左側に、niをオンにすることができます権利。

これらのサブツリー自体がBSTであるため、式を次のように要約できます。

f(n)= f(0)f(n-1) + f(1)f(n-2) + .......... + f(n-1)f(0)

基本ケース、f(0) =1。ノードが0のBSTを作成する方法は1つだけです。 f(1) =1。1つのノードでBSTを作成する方法は1つだけです。

Final Formula

29
chirag1992m

いいえの場合ノードの数はNです。

BST = Catalan(N)の異なる数
異なる構造のバイナリツリーの数は= Catalan(N)です。

異なるバイナリツリー数は= N!* Catalan(N)

10
Atiq

エリック・リッパートは最近、これについて非常に詳細な一連のブログ投稿をしました:「 Every Binary Tree There Is 」および「 Every Tree There( )」.

あなたの特定の質問に答えて、彼は言います:

N個のノードを持つバイナリツリーの数は、 Catalan number で与えられ、多くの興味深い特性があります。 n番目のカタロニア語の数は、式(2n)によって決定されます! /(n + 1)!n !、指数関数的に増加します。

10
Dean Harding

N個のノードを持つ異なるバイナリツリー:

(1/(n+1))*(2nCn)

ここで、C =組み合わせなど。

n=6,
possible binary trees=(1/7)*(12C6)=132
5
Sarang
(2n)!/n!*(n+1)!
4
karthik
The number of possible binary search tree with n nodes (elements,items) is

=(2n C n) / (n+1) = ( factorial (2n) / factorial (n) * factorial (2n - n) ) / ( n + 1 ) 

where 'n' is number of nodes  (elements,items ) 

Example :

for 
n=1 BST=1,
n=2 BST 2,
n=3 BST=5,
n=4 BST=14 etc
1
Vinayak