95. Unique Binary Search Trees II
2016-11-23 17:54
309 查看
与96. Unique Binary Search Trees很相似,
再新建一个function,传入起始位置start和结束位置end,思路虽然知道,但是总是写不出来,应该是敲代码敲的还不多,还不熟悉一些套路
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.
import java.util.ArrayList;
import java.util.List;
public class Solution {
public List<TreeNode> generateTrees(int n) {
if(n == 0) return new ArrayList<TreeNode>();
// 套路:不需要其他代码,只要一个helper function
return generateTrees(1, n);
}
private List<TreeNode> generateTrees(int start, int end) {
List<TreeNode> rst = new ArrayList<TreeNode>();
if(start > end) {
rst.add(null);
return rst;
}
if(start == end) {
rst.add(new TreeNode(start));
return rst;
}
for(int i=start; i<=end; i++) {
List<TreeNode> lefts = generateTrees(start, i-1);
List<TreeNode> rights = generateTrees(i+1, end);
// lefts, rights也会有null
for(TreeNode left : lefts) {
for(TreeNode right : rights){
TreeNode head = new TreeNode(i);
head.left = left;
head.right = right;
rst.add(head);
}
}
}
return rst;
}
}
再新建一个function,传入起始位置start和结束位置end,思路虽然知道,但是总是写不出来,应该是敲代码敲的还不多,还不熟悉一些套路
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.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
import java.util.ArrayList;
import java.util.List;
public class Solution {
public List<TreeNode> generateTrees(int n) {
if(n == 0) return new ArrayList<TreeNode>();
// 套路:不需要其他代码,只要一个helper function
return generateTrees(1, n);
}
private List<TreeNode> generateTrees(int start, int end) {
List<TreeNode> rst = new ArrayList<TreeNode>();
if(start > end) {
rst.add(null);
return rst;
}
if(start == end) {
rst.add(new TreeNode(start));
return rst;
}
for(int i=start; i<=end; i++) {
List<TreeNode> lefts = generateTrees(start, i-1);
List<TreeNode> rights = generateTrees(i+1, end);
// lefts, rights也会有null
for(TreeNode left : lefts) {
for(TreeNode right : rights){
TreeNode head = new TreeNode(i);
head.left = left;
head.right = right;
rst.add(head);
}
}
}
return rst;
}
}
相关文章推荐
- LeetCode-95. Unique Binary Search Trees II
- [leetcode]95. Unique Binary Search Trees II
- LeetCode 95.Unique Binary Search Trees II
- [leetcode] 95.Unique Binary Search Trees II
- 95. Unique Binary Search Trees II
- 95. Unique Binary Search Trees II
- [LeetCode] 95. Unique Binary Search Trees II
- 95. Unique Binary Search Trees II--还未做
- 95. Unique Binary Search Trees II
- LeetCode||95. Unique Binary Search Trees II
- [LeetCode] 95. Unique Binary Search Trees II 唯一二叉搜索树 II
- 95. Unique Binary Search Trees II
- [leetcode] 95. Unique Binary Search Trees II
- Leetcode 95. Unique Binary Search Trees II (Medium) (cpp)
- LeetCode 95. Unique Binary Search Trees II
- Leetcode 95. Unique Binary Search Trees II
- [Leetcode] 95. Unique Binary Search Trees II
- [LeetCode] 95. Unique Binary Search Trees II
- 【LeetCode】95. Unique Binary Search Trees II
- 【LeetCode】95. Unique Binary Search Trees II