原题链接:  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相关推荐

  1. 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/ 题解 题是 ...

  2. 【重点 递归构造二叉树】LeetCode 95. Unique Binary Search Trees II

    LeetCode 95. Unique Binary Search Trees II 本博客转载自:[1]https://segmentfault.com/a/1190000007443961 [2] ...

  3. 【Unique Binary Search Trees II】cpp

    题目: Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. F ...

  4. LeetCode Unique Binary Search Trees II(递归或者dp)

    问题:给出一个正整数,要求构造由1到n组成的所有的二叉搜索树 思路: 1.递归法 在求从1到n的二叉搜索树时,枚举中间值i(1到n),求[1,i-1]和[i+1,n]分别构成的二叉搜索树,然后根据左右 ...

  5. leetcode算法题--Unique Binary Search Trees II

    原题链接:https://leetcode.com/problems/unique-binary-search-trees-ii/ class Solution {public:vector<T ...

  6. 95. Unique Binary Search Trees II

    分成两边, left right排列组合加到root, lo==hi就返回当前值 1 class Solution { 2 public List<TreeNode> generateTr ...

  7. 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, ...

  8. Leetcode95. Unique Binary Search Trees II不同的二叉搜索树2

    给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树. 示例: 输入: 3 输出: [   [1,null,3,2],   [3,2,null,1],   [3,1,null,nul ...

  9. 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 ...

最新文章

  1. 主流报表制作工具之王者争夺战:功能大PK系列之“删除当前行”按钮制作
  2. CO-ACT物料分类账
  3. QT实现不同内置主题的外观
  4. python判断题题库大数据技术_智慧树_大数据分析的python基础_搜题公众号
  5. JavaScript编程语言 基础 (1)
  6. oracle服务说明
  7. python -v乱码提示,#import....等信息的问题解决方式。
  8. python-容器数据类型-知识小结
  9. 辗转相除法(欧几里得算法)求解最大公约数、最小公倍数
  10. java.lang.NoClassDefFoundError:org/apache/commons/lang/exception/NestableRuntimeException
  11. [转]C++异常处理 12
  12. CentOS下Neo4j安装教程
  13. Spring事务传播机制详解
  14. 元转万元单位换算_元要以万元为单位要怎么换算
  15. 非负数的正则表达式匹配
  16. 歪门邪道 Leetcode 463 Island Perimeter
  17. 红黑树详解,对插入旋转独到理解
  18. matlab仿真高尔顿正态分布源码,中心极限定理:从高尔顿板到麦克斯韦分布
  19. java 19位时间戳_Java将19位Unix时间戳转换为可读日期
  20. 数据结构——课程设计之~安排教学计划

热门文章

  1. h5 img js 点击图片放大_网页对应图片点击放大 html+js
  2. 被人误解的设计思路2
  3. 将480*640rgb888彩色图像转为rgb444彩色图像并制作coe文件(matlab)
  4. 酒店正负向点评可视化
  5. 手机版网页开发_鸿蒙OS手机版终于要来了! 2.0手机开发者Beta版即将发布
  6. SYD8821低功耗
  7. html邮件 正文图片不显示,如何在电子邮件正文中显示图像?
  8. 中国区块链技术论文首次中标国际顶会!创新工场王嘉平团队创造历史
  9. 投影仪好的推荐?智能投影仪哪个好
  10. easyui源码翻译1.32--Resizable(调整大小)