
LeetCode 96. 不同的二叉搜索树 C++卡特兰数解决
发布日期:2021-05-08 02:33:16
浏览次数:26
分类:精选文章
本文共 797 字,大约阅读时间需要 2 分钟。
给定一个整数n,求以1到n为节点组成的二叉搜索树的数量。这个问题可以通过卡特兰数来解决,具体步骤如下:
理解问题:二叉搜索树的特点是左子树的所有节点值都小于父节点,而右子树的所有节点值都大于父节点。对于给定的n个节点,所有可能的二叉搜索树的数量即为问题所求。
卡特兰数:卡特兰数常用于解决类似的问题,如有效括号序列、栈操作序列等。第n个卡特兰数记为C_n,计算公式为:[C_n = \frac{1}{n+1} \binom{2n}{n}]这个数与二叉搜索树的数量有关。
计算卡特兰数:使用递推公式或直接计算公式来计算卡特兰数。这里使用直接计算公式:[C_n = \frac{(2n)!}{(n+1)! \cdot n!}]为了避免计算阶乘带来的大数问题,可以逐步计算:[C_n = \prod_{i=1}^{n} \frac{2i - 1}{i}]
编写代码:根据上述公式编写代码计算卡特兰数。由于结果可能很大,使用long long类型存储。
以下是优化后的代码:
#includeusing namespace std;long long catalan(int n) { if (n == 0) return 1; long long res = 1; for (int i = 1; i <= n; ++i) { res *= (2 * i - 1); res /= i; } return res;}long long numTrees(int n) { if (n == 0 || n == 1) return 1; return catalan(n);}
输入样例:3
输出样例:5解释:当n=3时,卡特兰数C_3=5,与二叉搜索树的数量相符。代码通过递推计算卡特兰数,返回正确的结果。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月05日 08时24分03秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
稀疏数组
2019-03-06
js的严格模式
2019-03-06
idea的安装和无限期试用
2019-03-06
Oracle VM VirtualBox安装PVE虚拟机
2019-03-06
【转】如何用css限制文字长度,使溢出的内容用省略号…显示
2019-03-06
Android MediaPlayer setDataSource failed
2019-03-06
ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路
2019-03-06
【nodejs原理&源码杂记(8)】Timer模块与基于二叉堆的定时器
2019-03-06
大前端的自动化工厂(1)——Yeoman
2019-03-06
数据仓库建模方法论
2019-03-06
虚拟机搭建hadoop环境
2019-03-06
DataStax Bulk Loader教程(四)
2019-03-06
物联网、5G世界与大数据管理
2019-03-06
.NET应用框架架构设计实践 - 概述
2019-03-06
Rust 内置 trait :PartialEq 和 Eq
2019-03-06
Hibernate(十四)抓取策略
2019-03-06
[菜鸟的设计模式之旅]观察者模式
2019-03-06
Spring-继承JdbcDaoSupport类后简化配置文件内容
2019-03-06
Java基础IO流(一)
2019-03-06