96. Unique Binary Search Trees1和2
/*
这道题的关键是:动态表尽量的选取,知道二叉搜索树中左子树的点都比根节点小,右子树的点都比根节点大
所以当i为根节点,左子树有i-1个点,右子树有n-i个点,左右子树就可以开始递归构建,过程和一开始的过程是一样的,
而左右子树的特征中可以知道的就是点的个数,所以用点的个数作为动态变量就很好。
这样就给我们提供了一个思路:动态规划和树结合的题,由于子问题就是左右树,所以动态变量的选取基本就是考虑题目给出的信息
中,可以从根节点得到左右子树的哪些特征,用这个特征作为动态变量。 二叉搜索树中,都是左子树的点小于根节点,右子树的点大于根节点,对于所有子树都是这样。
用dp[i]表示有i个数的时候能组成多少树 dp[i] = dp[0]*dp[i-1]+ ...+ dp[i-1]*dp[0]
等号右边分别代表1到i分别是根节点的情况
*/
int[] dp = new int[n+1];
dp[0] = 1;//当没有节点时,就只有一种情况
for (int i = 1; i < n+1; i++) {
for (int j = 0; j < i; j++) {
dp[i] += dp[j] * dp[i-j-1];
}
}
return dp[n];
1 public List<TreeNode> generateTrees(int n) {
2 /*
3 从i到n依次选取做为根节点,生成一棵树.根节点为i的这个过程我们叫做function(i),则function(i)中左子树就是从1到i-1的
4 生成过程,右子树就是从i+1到n的过程,递归function就行,然后对左右子树就行全匹配就行
5 */
6 if (n < 1)
7 return new ArrayList<TreeNode>();
8 return build(1, n);
9 }
10
11 public List<TreeNode> build(int start, int end) {
12 List<TreeNode> res = new ArrayList<>();
13 if (start > end)
14 {
15 res.add(null);
16 return res;
17 }
18 for (int i = start; i <= end; i++) {
19 List<TreeNode> left = build(start, i - 1);
20 List<TreeNode> right = build(i + 1, end);
21
22 for (TreeNode lt :
23 left) {
24 for (TreeNode rt :
25 right) {
26 //由于每次组合都形成一个新的树,所以新建树应该是在这里
27 TreeNode root = new TreeNode(i);
28 root.left = lt;
29 root.right = rt;
30 //注意添加的位置,每组合一个左右子树就会形成一种情况
31 res.add(root);
32 }
33 }
34
35 }
36 return res;
37 }
96. Unique Binary Search Trees1和2的更多相关文章
- 52. leetcode 96. Unique Binary Search Trees
96. Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) tha ...
- [LeetCode] 96. Unique Binary Search Trees 唯一二叉搜索树
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- leetcode 96. Unique Binary Search Trees 、95. Unique Binary Search Trees II 、241. Different Ways to Add Parentheses
96. Unique Binary Search Trees https://www.cnblogs.com/grandyang/p/4299608.html 3由dp[1]*dp[1].dp[0]* ...
- 96. Unique Binary Search Trees
题目: Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For e ...
- 【一天一道LeetCode】#96. Unique Binary Search Trees
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given n ...
- [LeetCode] 96. Unique Binary Search Trees(给定一个数字n,有多少个唯一二叉搜索树) ☆☆☆
[Leetcode] Unique binary search trees 唯一二叉搜索树 Unique Binary Search Trees leetcode java 描述 Given n, h ...
- 96. Unique Binary Search Trees (Tree; DP)
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- 【LeetCode】96. Unique Binary Search Trees (2 solutions)
Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that st ...
- 96. Unique Binary Search Trees(I 和 II)
Given n, how many structurally unique BST's (binary search trees) that store values 1-n? For example ...
随机推荐
- 二、pandas学习
1.food.csv ========================================================================================= ...
- 针对五款IPA文件安装工具的深度评测
IPA是Apple程序应用文件iPhoneApplication的缩写,在日常中我们可以通过把IPA文件直接安装到iPhone手机来使用,故此笔者针对目前几种比较认可的方式做了对比,评测一下到底那款工 ...
- 老猿学5G扫盲贴:PDU协议数据单元、PDU连接业务和PDU会话的功能详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.PDU 关于PDU在百度百科是这样定义的:协议 ...
- 第三十一章、containers容器类部件QDockWidget停靠窗功能介绍
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 QDockWidget类提供了一个可以停靠在QMainWin ...
- PyQt学习随笔:Qt事件QEvent.type类型常量及其含义资料汇总详细内容速查
下表是Qt5.11提供的所有已经定义的事件类型常量及其含义说明(其中标蓝色的是老猿认为价值比较大的事件),事件的事件类型通过QEvent.type()来获取.由于老猿没有找到直接粘贴Excel表格的方 ...
- PyQt(Python+Qt)学习随笔:QTableView中数据行高和列宽的调整方法
老猿Python博文目录 老猿Python博客地址 一.概述 在QTableView中,除了采取缺省的间隔显示行和列的数据外,还可以通过带调整数据的行高和列宽. 二.列宽调整方法 调整数据行列宽的方法 ...
- js- for in 循环 只有一个目的,遍历 对象,通过对象属性的个数 控制循环圈数
for in 循环会返回 原型 以及原型链上面的属性,不会打印系统自带的属性 var obj ={ name:'suan', sex :'male', age:150, height:185, ...
- js- 实现属性名的拼接 obj['name']
obj.name---->obj[name] 这两种调用方式一样,使用obj.name内部转换成 obj['name'], 使用obj['name']更快. obj['name'] 里面必须是 ...
- Java中的Reference类使用
Java 2 平台引入了 java.lang.ref 包,这个包下面包含了几个Reference相关的类,Reference相关类将Java中的引用也映射成一个对象,这些类还提供了与垃圾收集器(gar ...
- Tomcat 知识点总结
Tomcat 学习笔记.本文相关配置均为 tomcat8 下,其他版本可能略有不同.如有错误请多包涵. 架构 首先,看一下整个架构图 接下来简单解释一下. Server:服务器.Tomcat 就是一个 ...