[LeetCode] 95. 不同的二叉搜索树 II
2024-10-07 08:17:57
题目链接 : 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
思路:
二叉搜索树, 一节点大于左子树节点, 小于右子树节点
所以我们节点是从1
到n
,当一个节点为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;
}
}
最新文章
- 2016福州大学软件工程 团队Git Review
- C#创建文件夹,往里追字符串。
- iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值
- Android开发学习笔记:Intent的简介以及属性的详解【转】
- POJ 3666 Making the Grade
- Jenkins控制台中文输出乱码解决方法
- .net 架构师/经理招聘,长期有效
- Quick-cocos2d-x v3.3 SocketTCP链接(转)
- HDU1151Air Raid(二分图的最大匹配)
- PHP之序列化与反序列化讲解
- lucene开发序之luke神器
- 从有限状态机的角度去理解Knuth-Morris-Pratt Algorithm(又叫KMP算法)
- Android常用组件Broadcast介绍
- %02d
- 51nod 区间中第K大的数
- Intellij IDEA 插件开发之自建插件仓库
- linux基础 用户(组)管理
- 页面Vue
- php笔记篇(二)
- 2016.6.18——Implement strStr()