卡特兰(Catalan)数的 6 种常见应用

看到“合法嵌套、不能越界、左右递归划分、固定顺序进出”时,优先想到卡特兰数。

通用公式
C_n = (2n)!(n+1)! * n!

常用值:C_0=1C_1=1C_2=2C_3=5C_4=14C_5=42C_6=132

核心判断

卡特兰数不是简单排列数。它通常在“每一步都必须合法”的计数中出现。

例如括号序列中,任意前缀里的右括号不能多于左括号;路径问题中,任意时刻不能越过对角线;栈问题中,出栈前必须已经入栈。

1. 二叉树形态数

左右子树递归划分

n 个结点时,不同二叉树结构的数量是 C_n

样例:n=3

3 个结点的二叉树形态共有 C_3=5 种:

形态 1o \ o \ o
形态 2o \ o / o
形态 3 o / \ o o
形态 4 o / o \ o
形态 5 o / o / o

2. 栈的合法出栈序列

固定入栈顺序

n 个不同元素按固定顺序入栈,问有多少种合法出栈序列,答案是 C_n

样例:元素 1,2,3 依次入栈

合法出栈序列共有 C_3=5 种:

123
132
213
231
321

312 不合法,因为 3 要先出栈时,12 已经被压在它下面,无法再按 12 的顺序出来。

3. 合法括号序列

括号匹配

n 对括号能组成多少种合法括号序列,答案是 C_n

样例:n=3

3 对括号的合法序列共有 C_3=5 种:

((()))
(()())
(())()
()(())
()()()

4. 凸多边形三角剖分

不相交对角线

一个凸 n+2 边形,用不相交对角线划分成三角形的方法数是 C_n

样例:五边形

五边形是 n+2=5,所以 n=3。三角剖分数量为 C_3=5

按顶点 A,B,C,D,E 顺时针编号,5 种三角剖分完整列出如下:

1 ABCDE AC, AD三角形:ABC、ACD、ADE
2 ABCDE AC, CE三角形:ABC、ACE、CDE
3 ABCDE AD, BD三角形:ABD、BCD、ADE
4 ABCDE BD, BE三角形:ABE、BCD、BDE
5 ABCDE BE, CE三角形:ABE、BCE、CDE

5. 不越过对角线的路径

前缀不能越界

(0,0)(n,n),每步向右或向上,且不越过主对角线的路径数是 C_n

样例:n=3

R 表示向右,U 表示向上,合法路径共有 C_3=5 种:

1 RRRUUU
2 RRURUU
3 RRUURU
4 RURRUU
5 RURURU

6. 不同二叉搜索树数量

选择根结点后左右分治

1~nn 个不同关键字,可以组成多少种不同形态的二叉搜索树,答案是 C_n

样例:关键字 1,2,3

不同二叉搜索树共有 C_3=5 种,完整列出如下:

1. 根为 11 \ 2 \ 3
2. 根为 11 \ 3 / 2
3. 根为 2 2 / \ 1 3
4. 根为 3 3 / 1 \ 2
5. 根为 3 3 / 2 / 1
记忆方法:二叉树、栈出栈、括号匹配、多边形划分、路径不越界、二叉搜索树,这些题都可以理解成“把一个整体递归地分成左边和右边”,或者“任意前缀都不能非法”。