バイナリツリーの場合:ツリーノード値を考慮する必要はありません。「N」ノードの異なるツリートポロジにのみ興味があります。
バイナリ検索ツリーの場合:ツリーノード値を考慮する必要があります。
この記事 同僚のニック・パーランテ(まだスタンフォードにいた頃から)がお勧めです。構造的に異なるバイナリツリーの数(問題12)には、単純な再帰的な解決策があります(閉じた形式では、@ codekaの答えが既に述べたカタロニア式になります)。
構造的に異なるバイナリsearchツリー(略してBST)の数が「プレーン」バイナリツリーの数とどのように異なるかはわかりません。 「ツリーノードの値を検討する」ことで、各ノードがBST条件と互換性のある任意の数、異なる(ただしすべてではない構造的に異なる!-)BSTの数は無限です。私はあなたがそれを意味しているとは思わないので、例であなたがdoの意味を明確にしてください!
バイナリツリーの総数は=
Iを合計すると、n個のノードを持つバイナリ検索ツリーの総数が得られます。
基本ケースはt(0) = 1およびt(1) = 1です。つまり、1つの空のBSTがあり、1つのノードを持つ1つのBSTがあります。
したがって、一般に、上記の式を使用して、バイナリ検索ツリーの総数を計算できます。 Googleこの式に関するインタビューで質問を受けました。質問は、6つの頂点で可能なバイナリ検索ツリーの合計数です。答えはt(6) = 132です
私はあなたにいくつかのアイデアを与えたと思う...
二分木の数は catalan number を使用して計算できます。
バイナリ検索ツリーの数は、再帰的なソリューションと見なすことができます。つまり、バイナリ検索ツリーの数=(Leftバイナリ検索サブツリーの数)*(Rightの数バイナリ検索サブツリー)*(ルートを選択する方法)
BSTでは、要素間の相対的な順序のみが重要です。したがって、一般性を失うことなく、ツリー内の個別の要素は1、2、3、4、....、nであると想定できます。また、BSTの数をf(n)for n elementsで表すとします。
ルートを選択するための複数のケースがあります。
......同様に、ルートとしての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つだけです。
いいえの場合ノードの数はNです。
BST = Catalan(N)の異なる数
異なる構造のバイナリツリーの数は= Catalan(N)です。
異なるバイナリツリー数は= N!* Catalan(N)
エリック・リッパートは最近、これについて非常に詳細な一連のブログ投稿をしました:「 Every Binary Tree There Is 」および「 Every Tree There( )」.
あなたの特定の質問に答えて、彼は言います:
N個のノードを持つバイナリツリーの数は、 Catalan number で与えられ、多くの興味深い特性があります。 n番目のカタロニア語の数は、式(2n)によって決定されます! /(n + 1)!n !、指数関数的に増加します。
N個のノードを持つ異なるバイナリツリー:
(1/(n+1))*(2nCn)
ここで、C =組み合わせなど。
n=6,
possible binary trees=(1/7)*(12C6)=132
(2n)!/n!*(n+1)!
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