顯然這與二叉搜索樹,特別是二叉樹無關,但一般來說,二叉樹。該實現使用歸納參數來計算可能的二叉樹數量,並用n
節點進行計數。
第一種情況是基本情況,其中一個onr沒有節點可能可能被排列到一棵樹中。
第二種情況通過假設出n
節點的計數的節點的數目,每個節點可以是根,這意味着剩餘n-1
節點將被分配到左和右子樹,其中,所有可能的conbinations的分佈是遞歸評估的;注意顯然節點是有區別的,這意味着同構樹被多次計數。
在遞歸評估左右子樹的可能實現之後,最終的可能性被相乘以獲得整個樹的可能實現的總數。
作爲一個例子,假設您想評估3
節點的樹數,對應節點集{1,2,3}
。該數字大於1
,並且這些節點中的每一個都可以是根,從而導致該循環進行3次迭代,如下所示。
1 is the root, 2 remaining nodes to distribute.
2 is the root, 2 remaining nodes to distribute.
3 is the root, 2 remaining nodes to distribute.
爲2
節點的評估將是相同的,所以我們擴大呼叫只是第一個電話。對於2
節點,對應節點集{1,2}
。該數字大於1
,導致循環進行如下2次迭代。
1 is the root, 1 remaining node to distribute.
2 is the root, 1 remaining node to distribute.
爲1
節點的evaulations將是相同的,即會出現正好1
可能性。
1 is the root, 1 remaining node to distribute;
the 1 node can be in either the left or the right subtree,
resulting in 1 possiblity each, which is 2 possibilities in total.
這意味着,對於一個呼叫爲2
節點結果將是2
。
回到上面的評估,我們獲得以下內容。
1 is the root, 2 remaining nodes to distribute;
possibilites:
2 in the left subtree, 0 in the right subtree;
results in 4*1 = 4 possibilities.
1 in the left subtree, 1 in the right subtree;
results in 1*1 = 1 possibilities.
0 in the left subtree, 2 in the right subtree;
results in 1*4 = 4 possibilities.
總結這些possibilites,有4 + 1 + 4 = 9種可能性只要根選擇安排與3
節點樹;然而,總共有3
方式來選擇根,這給出了總結果。
1 is the root, 2 remaining nodes to distribute;
results in 9 possibilites.
2 is the root, 2 remaining nodes to distribute;
results in 9 possibilites.
3 is the root, 2 remaining nodes to distribute;
results in 9 possibilites.
如果這些總結出來的,這是在總9+9+9=27
可能的樹。
同意,上面的方法基本上給出了no。不同的二叉樹可以用n個節點組成。 –