Unique Binary Tree
2016-03-28 11:31
375 查看
Given n, how many structurally unique BST’s (binary search trees) that store values 1…n?For example,Given n = 3, there are a total of 5 unique BST’s.
1 33 21 \ / / / \ \ 321 13 2 //\\ 212 3
对于本题中的BST(二分搜索树)的定义:
对于任一个节点(root 父节点),其左子树小于root,右子树大于root。
因此我们要做的就是找出相应的规律:
对于n=0时,f(0)=1;即是空树
n=1时,f(1)=1;即是只有一个节点的树;
对于n=2,我们可以分析1,2分别作为root 时的树的个数的和,
比如,以1为根的树的个数,等于左子树的个数乘以右子树的个数,左子树是0个元素的树,
右子树是2个元素的树。以2为根的树的个数,等于左子树的个数乘以右子树的个数,
左子树是1个元素的树,右子树也是1个元素的树。依此类推
所以;f(2)=f(0)*f(1)+f(1)*f(0);
f(3)=f(0)*f(2)+f(1)*f(1)+f(2)*f(0)
.............观察可得:
所以程序如下:
# include <iostream># include <vector>using namespace std;class Solution{public:int TreeNum(int n){vector<int>f(n + 1, 0);f[0] = 1;f[1] = 1;for (int i = 2; i <= n; i++){for (int k = 1; k <= i; k++)f[i] += f[k - 1] * f[i - k];}return f;}};int main(){Solution s1;int n;cout << "请输入整数n: ";cin >> n;cout << s1.TreeNum(n) << endl;system("pause");return 0;}
相关文章推荐
- Hadoop 数据类型与文件结构剖析 Sequence, Map, Set, Array, BloomMap Files
- UIDatePicker - 日期选择器
- 用阻塞队列LinkedBlockingQueue实现生产者消费者先进先出
- 【MUI】动态索引列表实现【搜索有效的方法】
- 环信 Ease3.0SDK 与EaseUI3.0 集成汇总 (卡壳的朋友们可以看看,已顺利集成成功)
- easyUI自带的时间插件日期选择、月份选择、时间选择的使用
- 安卓原生操作数据库时,使用ContentValues类
- LeetCode-Range Sum Query - Mutable
- mysql-异常Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1
- [uivier removefromsuperview]之后别忘了设置为nil
- ui控件的属性一般都是weak,但是内部变量的属性都是强引用,一般我们都是创建一个内部变量,然后让控件引用属性指向内变量
- Gradle build.gradle to Maven pom.xml
- 对于要不断使用的uiview一般通过懒加载的形式,而不是创建一个销毁一个
- codeforces 652E . Pursuit For Artifacts 强连通分量
- hdu 5493 Queue 树状数组第K大或者二分
- 让UITableview里自定义分区头部随着滑动而滑动
- requireJs模块化实现返回顶部的功能
- BlockingQueue
- c# Dictionary的TryGetValue的用法
- iOS 动画讲解(一)之UIView动画