Unique Binary Search Trees
2016-06-14 12:18
309 查看
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解:使用动态规划方法,这道题要求可行的二叉查找树的数量,其实二叉查找树可以任意取根,只要满足中序遍历有序的要求就可以。从处理子问题的角度来看,选取一个结点为根,就把结点切成左右子树,以这个结点为根的可行二叉树数量就是左右子树可行二叉树数量的乘积,所以总的数量是将以所有结点为根的可行结果累加起来。写成表达式如下:
![](http://2.bp.blogspot.com/-aqaV4LBzCnI/UwuKL8OGwlI/AAAAAAAAALM/wJzuSqdm9r8/s1600/catalan.png)
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解:使用动态规划方法,这道题要求可行的二叉查找树的数量,其实二叉查找树可以任意取根,只要满足中序遍历有序的要求就可以。从处理子问题的角度来看,选取一个结点为根,就把结点切成左右子树,以这个结点为根的可行二叉树数量就是左右子树可行二叉树数量的乘积,所以总的数量是将以所有结点为根的可行结果累加起来。写成表达式如下:
![](http://2.bp.blogspot.com/-aqaV4LBzCnI/UwuKL8OGwlI/AAAAAAAAALM/wJzuSqdm9r8/s1600/catalan.png)
class Solution { public: int numTrees(int n) { int nums[2000] ={0}; nums[0] = 1; nums[1] = 1; for(int i = 2 ;i<=n;i++){ for(int j = 0 ;j<i;j++){ nums[i] += nums[j] * nums[i-j-1]; } } return nums ; } };
相关文章推荐
- HTML之marquee标签详解
- 矩阵分解在推荐系统中的应用(中文译)- MATRIX FACTORIZATION TECHNIQUES FOR RECOMMENDER SYSTEMS
- Win10系统下软件UI显示不完整解决方案
- QtQuick学习笔记之QML定时器Timer
- iOS Bluetooth 打印小票
- *** Assertion failure in -[CLLocationManager setAllowsBackgroundLocationUpdates:], /BuildRoot/Librar
- [Android]判断是否是华为EMUI系统
- UITableView隐藏多余的分割线
- QtQuick学习笔记之QML键盘Keys事件
- easyui datagrid 多表头设置
- -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
- 【leetcode】318. Maximum Product of Word Lengths My Submissions QuestionEditorial Solution
- LeetCode-225.Implement Stack using Queues
- SDWebImage 如何为 UIImageView 添加图片
- Update statements cannot be executed as a query
- iOS UIAlterController
- 贝赛尔曲线实现圆形进度条
- QtQuick学习笔记之QML鼠标事件
- [APUE]进程环境
- UILable 字体颜色修改