題目描述:給定二叉樹的節點總數 n,輸出二叉樹形態總數,n<= 1000
輸入:3
輸出:5
n個結點組成的二叉樹形態總數=卡特蘭數=cmn
/(n+
1)
c_m^n/(n+1)
cmn/(
n+1)
,其中m=2n。
可以寫乙個cmn函式將分子一塊計算出來,最後除以n+1即可。
由於n=1000時,計算c會比較大,所以不能使用int
型,而要使用long long
型。
可以回顧一下【leetcode96】不同的二叉搜尋樹(dp)雖然也是求卡特蘭數,但那題則是給出以1、2、…、n為結點組成的二叉搜尋樹種數,即結點的大小是確定的,而本題的結點大小是不確定的,也不是組成二叉搜尋樹。
#include
using
namespace std;
long
long
cmn(
long
long n)
for(
int i=n; i>=
1; i--
)return fengzi / fengmu;
}int
main()
卡特蘭數和二叉樹的構造
卡特蘭數 f n c2 nn c 2nn 1f n c n c f n c 2nn c2n n 1 簡要介紹含義 長度為2n的01序列,0 1各n個,要求前任意個數字中,1的數量 geq 0的數量.詳細請看大佬原文章 應用 1.入棧順序確定,求出棧順序。1表示入棧,0表示出棧,因為要先入棧才能出棧,...
N個節點的二叉樹有多少種形態(卡特蘭數)
這是一道阿里的面試題。其實算不上新鮮,但是我之前沒關注過,如今碰到了,就順便 下這個問題吧 拿到這個題,首先想到的是直接寫出表示式肯定不行,所以有必要從遞推入手。由特殊到一般,歸納法麼 而且二叉樹離不開遞推這個尿性。先考慮只有乙個節點的情形,設此時的形態有f 1 種,那麼很明顯f 1 1 如果有兩個...
卡特蘭數 不同的二叉搜尋樹
卡特蘭數是組合數學中乙個常出現在各種計數問題 現的數列。其公式為 c n c 2 c n 1 c 3 c n 2 c n 1 c 2 假設n個節點存在 即有 g n f 1 f 2 f 3 f 4 f n n為根節點,當i為根節點時,其左子樹節點個數為 1,2,3,i 1 右子樹節點個數為 i 1,...