例題:
由3 個結點可以構造出多少種不同的二叉樹?
公式:catalan(n)=c(2n,n)/(n+1)。
n為結點數。
c(2n,n)是排列的知識。
有題目可以得到n = 3
所以有 c(2*3,3)/(3+1) = ((6*5*4)/(3*2*1)) / 4 = 5;
題外話:一棵具有 n個結點的完全二叉樹的樹高度(深度)是log2(n+1).
以下是**的實現
方法1
#include #define ll long long
using namespace std;
ll catalan(int n)
ll result = tmp[n];
delete tmp;
return result;
} int main()
方法2
#include#includeusing namespace std;
long long tmp[1000];
long long catalan(int n)
int main()
Catalan數 卡塔蘭數 的證明
定義 從 0,0 到 n,n 不越過 可以接觸 直線y x 即每一步的落腳點都滿足y x 且每次只能往上或往右走。求方案數。結果 c 2n,n c 2n,n 1 程式設計是可以實現小資料的 n比較小時可以列舉,不過n可能會很大 證明方法 有很多種,自己上維基百科就能搜到 這裡給大家介紹一種不太常見的...
卡塔蘭數介紹與應用
5.總結 最近在leetcode上鍛鍊演算法題的時候,偶然看到一篇介紹卡塔蘭數的文章,在這之前其實已經簡單的了解過卡塔蘭數以及與之相關問題,溫故而知新,藉此機會重新整理和總結一下,同時自己也手動寫出了遞推公式的推理過程,畢竟很多人第一次看到卡塔蘭的遞推公式時,都會有疑問,這條公式是怎麼來的。題目描述...
應用卡塔蘭數解決出棧分析
今天被一道資料結構習題難住了,覺得挺有意思就寫博一篇記錄下來,被該題男主並非是不會用程式設計解決,而是考慮問題思維太狹窄導致的。題目如下 鐵路進行列車排程時,常把站台設計成棧式結構的站台。試問 設有編號為1,2,3,4,5,6的六輛列車,順序開入棧式結構的站台,則可能的出棧序列有多少種?本題題意是,...