[96]Unique Binary Search Trees
来源:互联网 发布:手机淘宝开不了店2017 编辑:程序博客网 时间:2024/05/22 00:32
【题目描述】
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
Subscribe to see which companies asked this question
如果把上例的顺序改一下,就可以看出规律了。
比如,以1 为根的树的个数,等于左子树的个数乘以右子树的个数,左子树是0 个元素的树,
右子树是2 个元素的树。以2 为根的树的个数,等于左子树的个数乘以右子树的个数,左子树是1
个元素的树,右子树也是1 个元素的树。依此类推。
当数组为1; 2; 3; :::; n 时,基于以下原则的构建的BST 树具有唯一性:以i 为根节点的树,其左
子树由[1, i-1] 构成,其右子树由[i+1, n] 构成。
定义f(i) 为以[1; i] 能产生的Unique Binary Search Tree 的数目,则
如果数组为空,毫无疑问,只有一种BST,即空树,f(0) = 1。
如果数组仅有一个元素1,只有一种BST,单个节点,f(1) = 1。
如果数组有两个元素1,2,那么有如下两种可能
s(2) = s(0) *s(1) ,1 为根的情况
+ s(1) *s(0) ,2 为根的情况
再看一看3 个元素的数组,可以发现BST 的取值方式如下:
f(3) = s(0) *s(2) ,1 为根的情况
+ s(1)* s(1) ,2 为根的情况
+ s(2) *s(0) ,3 为根的情况
所以,由此观察,可以得出s 的递推公式为
至此,问题划归为一维动态规划。
【代码】
class Solution {public: int numTrees(int n) { vector<int> s(n+1,0); s[0]=1; s[1]=1; for(int i=2;i<=n;i++){ for(int j=1;j<=i;j++){ s[i]+=s[j-1]*s[i-j]; } } return s[n]; }};
0 0
- 96Unique Binary Search Trees
- [96]Unique Binary Search Trees
- 96Unique Binary Search Trees
- 96 - Unique Binary Search Trees
- 96 . Unique Binary Search Trees
- 96 Unique Binary Search Trees
- 96-Unique Binary Search Trees
- 96-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
- java之静态初始化块
- 网站广告收入反正要发动群众的力量,来创造利润--小黄人软件
- 第一个裸机程序---点亮led小灯
- 数据迁移类测试策略
- UML
- [96]Unique Binary Search Trees
- 计划继续深化学习物联网系统的相关知识 目前的WiFi模块基于ESP8266
- sql语句
- Xampp v3.2.1 安装 Memcached for windows
- nodejs 之express 笔记 include 代替 partials
- 图片翻转
- adb logcat命令查看并过滤android输出log
- 1025. 反转链表 (25)
- django.contirb.auth-认证