卡塔兰数及其应用

本文介绍了卡塔兰数在栈的出栈顺序和不同二叉搜索树个数问题中的应用。通过递推公式h(n)=h(n-1)*2(2n-1)/(n+1)计算卡塔兰数,并给出了代码实现。详细分析了n=1,2,3的情况,展示了各种可能的出栈序列和二叉树结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

卡塔兰数

一、常用公式

h(n) = h(n-1)*2(2n-1)/(n+1),h(0)=1,n>=1

二、应用

1.栈的出栈次序 — h(n)

概述:

入栈顺序为1,2,3 … n 时,出栈顺序有h(n)种。

分析:

  • n=1
    • 1入栈再出栈。[1]
  • n=2
    • 1入栈出栈,2入栈出栈。[1,2]
    • 1入栈,2入栈,2出栈,1出栈。[2,1]
  • n=3
    • 1入栈出栈,2入栈出栈,3入栈出栈。[1,2,3]
    • 1入栈出栈,2入栈,3入栈,3出栈,2出栈。[1,3,2]
    • 1入栈,2入栈,2出栈,1出栈,3入栈,3出栈。[2,1,3]
    • 1入栈,2入栈,2出栈,3入栈,3出栈,1出栈。[2,3,1]
    • 1入栈,2入栈,3入栈,3出栈,2出栈,1出栈。[3,2,1]
    • 无法实现[3,1,2]。因为若3是第一个出栈,则代表1,2肯定没出栈,要不然第一个出栈的就是1或2而不是3。此时栈内元素为[123] ,出栈顺序只能为3,2,1。

……

2.不同的二叉搜索树个数 — h(n)

概述:

二叉搜索树由结点值分别为[1,n]的n个结点构成,一共能构成h(n)个不同的二叉搜索树

分析(二叉树序列用层序遍历得到):

  • n=1
    • [1]
  • n=2
    • [2,1]
    • [1,null,2]
  • n=3
    • [1,null,2,null,3],[1,null,3,2,null]
    • [2,1,3] — 2正好大于1,小于3。就一种
    • [3,2,null,1,null] ,[3,1,null,null,2]

……

三、代码实现 — 已知n求h(n)

public int catalan(int n){	// n >= 1
	long h = 1;//用long防止计算过程中类型溢出。h(0) = 1
	for(int i = 1; i <= n; i++){
		h = h*2*(2*i-1)/(i+1);
	}
	return (int)h;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值