【一天一道LeetCode】#95. Unique Binary Search Trees II
一天一道LeetCode
本系列文章已全部上传至我的github,地址:ZeeCoder‘s Github
欢迎大家关注我的新浪微博,我的新浪微博
欢迎转载,转载请注明出处
(一)题目
Given an integer n, generate all structurally unique BST’s (binary search trees) that store values 1…n.
For example,
Given n = 3, your program should return all 5 unique BST’s shown below.
(二)解题
刷了这么久的题,做题起来还是这么吃力,好心塞。
今天这道题想了好久,写完代码发现思路都错了。
明天继续想!
——————————————–20160619 updata———————————————
题目大意:给定一个数n,求以1~n组成的所有二叉搜索树。
二叉搜索树的特征是:左子树<根节点<右子树
由这个特征可以得出解题的大致思路:
首先从1~n中选取一个数i,将小于i的数放在一个集合left中,将大于i的放在另一个集合right中,再从left和right中各选取一个数作为i的左右子树,剩下的就是递归的过程了。
left集合和right集合中也是进行上述同样的操作,选取一个i,大于和小于i的分别选一个数作为左右子树,得到一个小二叉搜索树。
最后就可以得到所有的二叉搜索树的集合了。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<TreeNode*> generateTrees(int n) {
vector<TreeNode*> ret;
if(n==0) return ret;//n=0,特殊情况
ret = createTree(1,n);
return ret;
}
vector<TreeNode*> createTree(int start ,int end)
{
vector<TreeNode*> results;
if(start > end)//代表没有选取的节点了
{
results.push_back(NULL);
return results;
}
for(int i = start ; i <= end ; i++)
{
vector<TreeNode*> left = createTree(start,i-1);//左边的子树集合
vector<TreeNode*> right = createTree(i+1,end);//右边的子树集合
for(int m = 0 ; m < left.size() ; m++)
{
for(int n = 0 ; n < right.size() ; n++)
{
TreeNode* root = new TreeNode(i);
root ->left = left[m];//从小于i的数中选取一个作为左子树
root ->right = right[n];//从大于i的数中选取一个作为右子树
results.push_back(root);
}
}
}
return results;//返回以i为root节点的子二叉搜索树
}
};
【一天一道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 动态演示
比如输入为n, 这道题目就是让返回由1,2,... n的组成的所有二叉排序树,每个树都必须包含这n个数 这是二叉树的排列组合的题目.排列组合经常用DFS来解决. 这道题比如输入为3,也就是求start ...
- 【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]* ...
随机推荐
- junit4.9测试用例 spring测试用例 Assert 注解
junit4.9测试用例 测试基类 import org.junit.runner.RunWith; import org.springframework.test.context.ContextCo ...
- Java IO流笔记
File 类 ps:注意file的delete失败可能是输入输出流还在用这个file Java实现简单文件管理 package fileDemo; import java.io.File; impor ...
- Docker的Etcd项目
etcd 是 CoreOS 团队发起的一个管理配置信息和服务发现(service discovery)的项目,在这一章里面,我们将介绍该项目的目标,安装和使用,以及实现的技术. Docker的etcd ...
- Elasticsearch+Hbase实现海量数据秒回查询
---------------------------------------------------------------------------------------------[版权申明:本 ...
- Linux 下的一个全新的性能测量和调式诊断工具 Systemtap,第 1 部分: kprobe
kprobe 的原理.编程接口.局限性和使用注意事项 本系列文章详细地介绍了一个Linux下的全新的调式.诊断和性能测量工具Systemtap和它所依赖的基础kprobe以及促使开发该工具的先驱DTr ...
- iOS 中的block异常
转自:iOS 知识小集 我们在调用block时,如果这个block为nil,则程序会崩溃,报类似于EXC_BAD_ACCESS(code=1, address=0xc)异常[32位下的结果,如果是64 ...
- Android自定义View实战(SlideTab-可滑动的选择器)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/52178553 本文出自:[openXu的博客] 目录: 初步分析重写onDraw绘制 重写o ...
- Android图表库MPAndroidChart(三)——双重轴线形图的实现,这次就so easy了
Android图表库MPAndroidChart(三)--双重轴线形图的实现,这次就so easy了 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库 ...
- Android安全升级的7.0: Nougat
Tamic http://www.jianshu.com/users/3bbb1ddf4fd5/latest_articles 今年夏天以来,Google做了多种增强的安全性在Android的7.0N ...
- Java异常处理-----非运行时异常(受检异常)
非运行时异常(受检异常) 如果出现了非运行时异常必须进行处理throw或者try{}catch(){}处理,否则编译器报错. 1:IOException 使用要导入包import java.io.IO ...