您的位置:首页 > 编程语言 > Java开发

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.

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Binary Tree java leetcode