LintCode :不同的二叉查找树
来源:互联网 发布:如何下载photoshop软件 编辑:程序博客网 时间:2024/06/05 08:50
LintCode :不同的二叉查找树
题目
给出 n,问由 1…n 为节点组成的不同的二叉查找树有多少种?
样例
给出n = 3,有5种不同形态的二叉查找树:
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \2 1 2 3
思路
这里我们可以采用卡特兰树的方法,关于卡特兰树大家可以去维基百科卡特兰树看看。这里面刚好有提到用卡特兰树解决二叉查找树的方法,那为什么可以解决好像没说,那这里我就来简单的说一下。
卡特兰树的递推定义是这样的
代码
int numTrees(int n) { unsigned long long up = 1; for(int i = 0; i < n; i++) if(i % 2 == 1) up *= 2 * n - i; else up *= 2; unsigned long long down = 1; for(int i = 0; i < n / 2; i++) down *= n / 2 - i; return up / down / (n + 1); }
(哦,对了,这里为了处理阶乘溢出的问题在求阶乘的时候做了一些处理。因为分母是n!*n!分子是2n!,所以第一步约分之后分子剩下的是2n*(2n-1)*…*(n+2)*(n+1),分母则是n!,然后因为分子分母长度一样,数值上2n又是n的两倍,所以分子的偶数部分是可以跟分母消掉后只剩下2的,分子部分消掉后其实就只剩下n / 2!这一部分了,这样处理之后计算阶乘就不会溢出了。)
0 0
- LintCode-不同的二叉查找树 II
- LintCode-不同的二叉查找树
- lintcode-不同的二叉查找树-163
- LintCode 不同的二叉查找树
- LintCode:不同的二叉查找树
- 不同的二叉查找树 II lintcode
- lintcode,不同的二叉查找树
- LintCode 163-不同的二叉查找树
- LintCode :不同的二叉查找树
- lintcode-不同的二叉查找树
- 不同的二叉查找树-LintCode
- 不同的二叉查找树 II -LintCode
- lintcode --不同的二叉查找树
- lintcode--不同的二叉查找树II
- lintcode:不同的二叉查找树
- LintCode:M-不同的二叉查找树个数
- LINTCODE——不同的二叉查找树
- LintCode -- 不同的二叉查找树(python-O(n)时间复杂度)
- Mysql索引会失效的几种情况分析
- jdbc连接数据库
- 表设计优化(MySQL作为报表数据库)
- 接口初始化(接口为null的判断)
- 东方通tongweb使用jndi访问数据源以及达梦数据测试
- LintCode :不同的二叉查找树
- RecyclerView的通用适配器,和滚动时不加载图片的封装
- 冒泡排序--学习笔记
- python format 在sql中对 string 和 int 类型的变化
- Android中Bitmap和Drawable详解
- JAVA版 微信企业号开发 个人总结(微信网页授权例子,微信企业号精准定位,误差5-10米)
- Android面试题笔记(一)
- postgresql: pg_ctl -D data start 出现 postgres aaaaaaaaaaaaaaaaaaaaaaaaa "C:/Users/huang zhen yang/dat
- 用printf函数打印较长的字符串的三种方法~