【单选】含 6 个结点的不同形态的二叉树共有多少棵(结点不带标号,区分左右子树)( )。
"不带标号、区分左右子树"的二叉树就是卡特兰数:n 个结点的形态数为 Cₙ = 1/(n+1)·C(2n, n)。n = 6 时 C₆ = 132。
用 C(2n,n) 而忘记除以 (n+1)(得 924);或者误当成"带标号的二叉树"(那要再乘 6!)。
本题考查卡特兰数的经典应用场景。
设 f(n) 为"n 个结点、区分左右子树的不带标号二叉树"的形态数。枚举根结点左子树的结点数 i(0 ≤ i ≤ n−1),则右子树有 n−1−i 个结点:
f(n) = Σ_{i=0}^{n−1} f(i) · f(n−1−i), f(0) = 1
这正是卡特兰数的递推定义,故 f(n) = Cₙ = 1/(n+1) · C(2n, n)。
C₆ = 1/(6+1) × C(12, 6) = 1/7 × 924 = 132
答案 C。
| n | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| 形态数 | 1 | 1 | 2 | 5 | 14 | 42 | 132 |
(可用递推式 Cₙ = Cₙ₋₁ · 2(2n−1)/(n+1) 逐项算:42 → 42×2×11/7 = 132 ✓)
1. n 个结点的不同二叉树形态数; 2. n 对括号的合法匹配数; 3. 栈的出栈序列数(n 个元素); 4. 不含交叉的凸多边形三角剖分数; 5. 从 (0,0) 走到 (n,n) 且不越过对角线的路径数。
看到这些字眼,直接套 Cₙ = C(2n,n)/(n+1)。