题目链接 : https://leetcode-cn.com/problems/unique-binary-search-trees-ii/

题目描述:

给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树

示例:

输入: 3
输出:
[
  [1,null,3,2],
  [3,2,null,1],
  [3,1,null,null,2],
  [2,1,3],
  [1,null,2,null,3]
]
解释:
以上的输出对应以下 5 种不同结构的二叉搜索树: 1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3

思路:

二叉搜索树, 一节点大于左子树节点, 小于右子树节点

所以我们节点是从1n,当一个节点为val那么它的左边是< val,右边是>val,

我们用递归解决!

代码:

# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
import functools
class Solution:
def generateTrees(self, n: int) -> List[TreeNode]:
if n == 0: return []
@functools.lru_cache(None)
def helper(start, end):
res = []
if start > end:
res.append(None)
for val in range(start, end + 1):
for left in helper(start, val - 1):
for right in helper(val + 1, end):
root = TreeNode(val)
root.left = left
root.right = right
res.append(root)
return res return helper(1, n)

java

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<TreeNode> generateTrees(int n) { if (n == 0) return new ArrayList<>();
return helper(1, n); } private List<TreeNode> helper(int start, int end) {
List<TreeNode> res = new ArrayList<>();
if (start > end) {
res.add(null);
return res;
}
for (int val = start; val <= end; val++) {
List<TreeNode> left = helper(start, val - 1);
List<TreeNode> right = helper(val + 1, end);
for (TreeNode l : left) {
for (TreeNode r : right) {
TreeNode root = new TreeNode(val);
root.left = l;
root.right = r;
res.add(root);
}
}
}
return res;
}
}

最新文章

  1. 2016福州大学软件工程 团队Git Review
  2. C#创建文件夹,往里追字符串。
  3. iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值
  4. Android开发学习笔记:Intent的简介以及属性的详解【转】
  5. POJ 3666 Making the Grade
  6. Jenkins控制台中文输出乱码解决方法
  7. .net 架构师/经理招聘,长期有效
  8. Quick-cocos2d-x v3.3 SocketTCP链接(转)
  9. HDU1151Air Raid(二分图的最大匹配)
  10. PHP之序列化与反序列化讲解
  11. lucene开发序之luke神器
  12. 从有限状态机的角度去理解Knuth-Morris-Pratt Algorithm(又叫KMP算法)
  13. Android常用组件Broadcast介绍
  14. %02d
  15. 51nod 区间中第K大的数
  16. Intellij IDEA 插件开发之自建插件仓库
  17. linux基础 用户(组)管理
  18. 页面Vue
  19. php笔记篇(二)
  20. 2016.6.18——Implement strStr()

热门文章

  1. luogu P1223 排队接水 x
  2. springboot(二).springboot整合logback用于日志输出
  3. THU-CCF WC2019两开花记
  4. 测试常用linux命令之系统监测
  5. instanceOf与isInstance()方法之间的区别
  6. 2018-2019-2 网络对抗技术 20165235 Exp 9 Web安全基础
  7. CentOS7 如何挂载网络设备
  8. 终极Shell - Oh My Zsh
  9. .net通用签名方法 webapi签名方法
  10. HTML——超级链接 表格 框架