LeetCode 95. Unique Binary Search Trees II 动态演示
比如输入为n, 这道题目就是让返回由1,2,... n的组成的所有二叉排序树,每个树都必须包含这n个数
这是二叉树的排列组合的题目。排列组合经常用DFS来解决。
这道题比如输入为3,也就是求start=1, end=3的所有树,简写为t[1,3]。那么就要考虑这些情况:
//t[a,b]={NULL} if a>b
root为1,left为t[1,0], right为t[2,3] left为{NULL}, right为两个树(见下面解释)
root为2,left为t[1,1], right为t[3,3]
root为3,left为t[1,2], right为t[4,3]
类似,要求t[2,3], 就要考虑下面情况
root为2,left为t[2,1], right为t[3,3], 可以看出只有一个
root为3,left为t[2,2], right为t[4,3], 也只有一个
另外对于DFS,为防止重复计算,可以用map来存储计算过的t[x,y]。这也是经常用到的办法。
class Solution {
public:
vector<TreeNode*> generateTreesDFS(int start, int end, map<pair<int,int>, vector<TreeNode*>>& vecTreeMap) {
vector<TreeNode*> subTree;
if(vecTreeMap.find({start, end}) != vecTreeMap.end())
return vecTreeMap[{start,end}];
//a(start)
//a(end)
//ahd(subTree)
if (start > end) subTree.push_back(NULL);
else {
for (int i = start; i <= end; ++i) {
vector<TreeNode*> leftSubTree = generateTreesDFS(start, i - , vecTreeMap);
vector<TreeNode*> rightSubTree = generateTreesDFS(i + , end, vecTreeMap);
for (int j = ; j < leftSubTree.size(); ++j) {
for (int k = ; k < rightSubTree.size(); ++k) {
TreeNode *node = new TreeNode(i);
node->left = (leftSubTree)[j];
node->right = (rightSubTree)[k];
subTree.push_back(node);
}
}
}
//dsp
}
vecTreeMap[{start, end}] = subTree;
return subTree;
}
vector<TreeNode*> generateTrees(int n) {
if(n==) return {};
map<pair<int,int>, vector<TreeNode*>> vecTreeMap;
//amap(vecTreeMap, pair<int,int>, vector<TreeNode*>)
return generateTreesDFS(,n, vecTreeMap);
}
};
程序动态运行过程:http://simpledsp.com/FS/Html/lc95.html
LeetCode 95. Unique Binary Search Trees II 动态演示的更多相关文章
- [LeetCode] 95. Unique Binary Search Trees II(给定一个数字n,返回所有二叉搜索树) ☆☆☆
Unique Binary Search Trees II leetcode java [LeetCode]Unique Binary Search Trees II 异构二叉查找树II Unique ...
- [leetcode]95. Unique Binary Search Trees II给定节点形成不同BST的集合
Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ...
- [LeetCode] 95. Unique Binary Search Trees II 唯一二叉搜索树 II
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...
- [LeetCode] 95. Unique Binary Search Trees II 独一无二的二叉搜索树之二
Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ...
- leetcode 95 Unique Binary Search Trees II ----- java
Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ...
- leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...
- [leetcode]95 Unique Binary Search Trees II (Medium)
原题 字母题添加链接描述 一开始完全没有思路.. 百度看了别人的思路,对于这种递归构造的题目还是不熟,得多做做了. 这个题目难在构造出来.一般构造树都需要递归. 从1–n中任意选择一个数当做根节点,所 ...
- 【LeetCode】95. Unique Binary Search Trees II 解题报告(Python)
[LeetCode]95. Unique Binary Search Trees II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzh ...
- 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]* ...
随机推荐
- CVE-2013-2094 porting to x86-32 分析
/* * linux 2.6.37-3.8.8 - x86 * @rikiji * * requires System.map and /dev/ptmx * this: http://zmbs.ne ...
- Nmap参考指南中文版
Nmap参考指南中文版 来源: http://www.nmap.com.cn/doc/manual.shtm 译注 该Nmap参考指南中文版由Fei Yang <fyang1024@gmail. ...
- Mysql --09 Innodb核心特性——事务
目录 Innodb核心特性--事务 1.什么是事务 2.事务的通俗理解 3.事务ACID特性 4.事务流程举例 5.事务的控制语句 6.事务隐式提交情况 7.事务日志redo基本功能 8.redo数据 ...
- 牛客小白月赛16 F 小石的妹子 (线段树)
链接:https://ac.nowcoder.com/acm/contest/949/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 前端学习(三十八)vue(笔记)
Angular+Vue+React Vue性能最好,Vue最轻=======================================================Angular ...
- AndroidStudio之Theme、colorPrimary、colorPrimaryDark、colorAccent详解
今天就来看看在Androi5.0中常用的颜色属性. 我们可以先定义一个style,然后在这个style中设定每一个Activity或者整个App的颜色,最后在清单文件中来给某个Activity设置主题 ...
- Sass函数:random()函数
random() 函数是用来获取一个随机数 >> random() 0.03886 >> random() 0.66527 >> random() 0.8125 & ...
- Sass-加法
程序中的运算是常见的一件事情,但在 CSS 中能做运算的,到目前为止仅有 calc() 函数可行.但在 Sass 中,运算只是其基本特性之一.在 Sass 中可以做各种数学计算 (一).加法 加法运算 ...
- IntelliJ IDEA 代码调式
Mute Breakpoints: 保留所有断点,但是不执行(程序一次性执行). Condition: 条件触发 即当执行到i的值变为5的时候,在断点处暂停.
- mui is not defined
vue项目中引用mui.js,我是在main.js中这样引入的, 结果报错 查找资料,最后在mui.js的最后添加了这样一句 这是因为mui并不能像jquery那样作为全局对象存在,加上wi ...