Unique Binary Search Trees
来源:互联网 发布:网络咨询医生技巧例子 编辑:程序博客网 时间:2024/06/11 07:47
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 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
解题思路:
BST定义::左子树节点均小于root,右子树节点均大于root!不要想当然地将某个点作为root时,认为其他所有节点都能全部放在left/right中,除非这个点是 min 或者 max 的。
本题其实关键是递推过程的分析,n个点中每个点都可以作为root,当 i 作为root时,小于 i 的点都只能放在其左子树中,大于 i 的点只能放在右子树中,此时只需求出左、右子树各有多少种,二者相乘即为以 i 作为root时BST的总数。
开始时,我尝试用递归实现,但是超时了,可见系统对运行时间有要求。因为递归过程中存在大量的重复计算,从n一层层往下递归,故考虑类似于动态规划的思想,让底层的计算结果能够被重复利用,故用一个数组存储中间计算结果(即 1~n-1 对应的BST数目),这样只需双层循环即可,代码如下:
class Solution {public: int numTrees(int n) { vector<int> array; array.push_back(1); for(int i=1;i<=n;i++) { array.push_back(0); if(i<3) array[i]=i; else { for(int j=1;j<=i;j++) { array[i]+=array[j-1]*array[i-j]; } } } return array[n]; }};
0 0
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- 关于本博客和本人的说明
- ios-runtime原理
- 【Windows编程】系列第十一篇:多文档界面框架
- 【IT面经】献给正在找工作的程序员
- app后端开发四:GeoHash实现查找附近的X
- Unique Binary Search Trees
- 减少linux服务器大量TIME_WAIT
- Objective-C类,NSBundle介绍和使用
- PAT(B) 1029. 旧键盘
- C++中的智能指针
- Linux下screen的使用
- Echarts字符云tooltip显示混乱问题的解决办法
- android状态选择器小技巧
- 最新CocoaPods的安装及使用(持续更新中)