Unique Binary Search Trees II -- LeetCode
原题链接: http://oj.leetcode.com/problems/unique-binary-search-trees-ii/
这道题是求解所有可行的二叉查找树,从 Unique Binary Search Trees 中我们已经知道,可行的二叉查找树的数量是相应的 卡特兰数 ,不是一个多项式时间的数量级,所以我们要求解所有的树,自然是不能多项式时间内完成的了。算法上还是用求解 NP问题 的方法来求解,也就是 N-Queens 中介绍的在循环中调用递归函数求解子问题。思路是每次一次选取一个结点为根,然后递归求解左右子树的所有结果,最后根据左右子树的返回的所有子树,依次选取然后接上(每个左边的子树跟所有右边的子树匹配,而每个右边的子树也要跟所有的左边子树匹配,总共有左右子树数量的乘积种情况),构造好之后作为当前树的结果返回。代码如下:
public ArrayList<TreeNode> generateTrees(int n) {return helper(1,n);
}
private ArrayList<TreeNode> helper(int left, int right)
{ArrayList<TreeNode> res = new ArrayList<TreeNode>();if(left>right){res.add(null);return res;}for(int i=left;i<=right;i++){ArrayList<TreeNode> leftList = helper(left,i-1);ArrayList<TreeNode> rightList = helper(i+1,right);for(int j=0;j<leftList.size();j++){for(int k=0;k<rightList.size();k++){TreeNode root = new TreeNode(i);root.left = leftList.get(j);root.right = rightList.get(k);res.add(root);}}}return res;
}
实现中还是有一些细节的,因为构造树时两边要遍历所有左右的匹配,然后接到根上面。
当然我们也可以像在 Unique Binary Search Trees 中那样存储所有的子树历史信息,然后进行拼合,虽然可以省一些时间,但是最终还是逃不过每个结果要一次运算,时间复杂度还是非多项式的,并且要耗费大量的空间,感觉这样的意义就不是很大了。
Unique Binary Search Trees II -- LeetCode相关推荐
- leetcode 95. Unique Binary Search Trees II | 96. Unique Binary Search Trees
95. Unique Binary Search Trees II https://leetcode.com/problems/unique-binary-search-trees-ii/ 题解 题是 ...
- 【重点 递归构造二叉树】LeetCode 95. Unique Binary Search Trees II
LeetCode 95. Unique Binary Search Trees II 本博客转载自:[1]https://segmentfault.com/a/1190000007443961 [2] ...
- 【Unique Binary Search Trees II】cpp
题目: Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. F ...
- LeetCode Unique Binary Search Trees II(递归或者dp)
问题:给出一个正整数,要求构造由1到n组成的所有的二叉搜索树 思路: 1.递归法 在求从1到n的二叉搜索树时,枚举中间值i(1到n),求[1,i-1]和[i+1,n]分别构成的二叉搜索树,然后根据左右 ...
- leetcode算法题--Unique Binary Search Trees II
原题链接:https://leetcode.com/problems/unique-binary-search-trees-ii/ class Solution {public:vector<T ...
- 95. Unique Binary Search Trees II
分成两边, left right排列组合加到root, lo==hi就返回当前值 1 class Solution { 2 public List<TreeNode> generateTr ...
- 95. Unique Binary Search Trees II 不同的二叉搜索树 II
给定一个整数 n,生成所有由 1 - n 为节点所组成的 二叉搜索树 . 示例: 输入:3 输出: [[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1, ...
- Leetcode95. Unique Binary Search Trees II不同的二叉搜索树2
给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树. 示例: 输入: 3 输出: [ [1,null,3,2], [3,2,null,1], [3,1,null,nul ...
- 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 ...
最新文章
- 主流报表制作工具之王者争夺战:功能大PK系列之“删除当前行”按钮制作
- CO-ACT物料分类账
- QT实现不同内置主题的外观
- python判断题题库大数据技术_智慧树_大数据分析的python基础_搜题公众号
- JavaScript编程语言 基础 (1)
- oracle服务说明
- python -v乱码提示,#import....等信息的问题解决方式。
- python-容器数据类型-知识小结
- 辗转相除法(欧几里得算法)求解最大公约数、最小公倍数
- java.lang.NoClassDefFoundError:org/apache/commons/lang/exception/NestableRuntimeException
- [转]C++异常处理 12
- CentOS下Neo4j安装教程
- Spring事务传播机制详解
- 元转万元单位换算_元要以万元为单位要怎么换算
- 非负数的正则表达式匹配
- 歪门邪道 Leetcode 463 Island Perimeter
- 红黑树详解,对插入旋转独到理解
- matlab仿真高尔顿正态分布源码,中心极限定理:从高尔顿板到麦克斯韦分布
- java 19位时间戳_Java将19位Unix时间戳转换为可读日期
- 数据结构——课程设计之~安排教学计划
热门文章
- h5 img js 点击图片放大_网页对应图片点击放大 html+js
- 被人误解的设计思路2
- 将480*640rgb888彩色图像转为rgb444彩色图像并制作coe文件(matlab)
- 酒店正负向点评可视化
- 手机版网页开发_鸿蒙OS手机版终于要来了! 2.0手机开发者Beta版即将发布
- SYD8821低功耗
- html邮件 正文图片不显示,如何在电子邮件正文中显示图像?
- 中国区块链技术论文首次中标国际顶会!创新工场王嘉平团队创造历史
- 投影仪好的推荐?智能投影仪哪个好
- easyui源码翻译1.32--Resizable(调整大小)