leetCode练习(95)
2016-10-26 10:17
211 查看
题目:Unique Binary Search Trees II
难度:MEDIUM
问题描述:
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.
解题思路:
通过先解决的Unique Binary Search Trees I,我们知道了可以用动态规划的方法解,这里方法与|一样,通过子问题解的组合来构成现问题的解。易错点在于,n=0时,我们对属于它的链表res[0]也要加入节点null,否则如果左子树需要n=0的解集,而链表为空,则会直接跳过里面对右子树的访问。所以我们需要加入一行res[0].add(null);
这样就能解决此问题。
具体代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<TreeNode> generateTrees(int n) {
List<TreeNode>[] res=new List[n+1];
res[0]=new ArrayList<>();
if(n==0) return res[0];
res[0].add(null);
for(int i=1;i<=n;i++){
res[i]=new ArrayList<>();
for(int j=1;j<=i;j++){
for(TreeNode left:res[j-1]){
for(TreeNode right:res[i-j]){
TreeNode root=new TreeNode(j);
root.left=left;
root.right=Clone(right,j);
res[i].add(root);
}
}
}
}
return res
;
}
public TreeNode Clone(TreeNode root,int index){
if(root==null) return null;
TreeNode res=new TreeNode(root.val+index);
res.left=Clone(root.left,index);
res.right=Clone(root.right,index);
return res;
}
}
难度:MEDIUM
问题描述:
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
解题思路:
通过先解决的Unique Binary Search Trees I,我们知道了可以用动态规划的方法解,这里方法与|一样,通过子问题解的组合来构成现问题的解。易错点在于,n=0时,我们对属于它的链表res[0]也要加入节点null,否则如果左子树需要n=0的解集,而链表为空,则会直接跳过里面对右子树的访问。所以我们需要加入一行res[0].add(null);
这样就能解决此问题。
具体代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<TreeNode> generateTrees(int n) {
List<TreeNode>[] res=new List[n+1];
res[0]=new ArrayList<>();
if(n==0) return res[0];
res[0].add(null);
for(int i=1;i<=n;i++){
res[i]=new ArrayList<>();
for(int j=1;j<=i;j++){
for(TreeNode left:res[j-1]){
for(TreeNode right:res[i-j]){
TreeNode root=new TreeNode(j);
root.left=left;
root.right=Clone(right,j);
res[i].add(root);
}
}
}
}
return res
;
}
public TreeNode Clone(TreeNode root,int index){
if(root==null) return null;
TreeNode res=new TreeNode(root.val+index);
res.left=Clone(root.left,index);
res.right=Clone(root.right,index);
return res;
}
}
相关文章推荐
- (Leetcode 95+96)Unique Binary Search Trees 动态规划 分治
- LeetCode练习:subset
- Leetcode练习<二十一>求解整数的平方根
- leetCode练习(133)
- leetcode95 Unique Binary Search Trees II
- LeetCode-95-Unique Binary Search Trees II 二叉树
- leetCode练习(51)
- [leetcode 95] Unique Binary Search Trees II
- leetCode练习(59)
- leetcode练习(441,442)python实现
- LeetCode Online Judge 题目C# 练习 - Longest Palindromic Substring
- Leetcode练习<十六> 爬楼梯与斐波那契数列
- LeetCode Online Judge 题目C# 练习 - N-QueensII
- LeetCode Online Judge 题目C# 练习 - Search in Rotated Sorted Array II
- LeetCode Online Judge 题目C# 练习 - Subsets
- leetCode练习(77)
- leetcode练习 Beautiful Arrangement
- leetCode练习(80)
- LeetCode Online Judge 题目C# 练习 - Wildcard Matching
- [LeetCode]95 不同二分查找树之二