Algorithms—95.Unique Binary Search Trees II
2015-09-08 17:24
429 查看
思路:再上一题的基础上继续使用动态规划。
/**
* 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) {
return f(1,n,new HashMap<String, List<TreeNode>>());
}
public List<TreeNode> f(int s,int e,Map<String,List<TreeNode>> map) {
if (map.get(""+s+","+e)==null) {
List<TreeNode> ans=new ArrayList<TreeNode>();
if (s>e) {
ans.add(null);
}else if (s==e) {
ans.add(new TreeNode(s));
}else {
for (int i = s; i <=e; i++) {
List<TreeNode> left=f(s,i-1,map);
List<TreeNode> right=f(i+1,e,map);
for (int j = 0; j < left.size(); j++) {
for (int k = 0; k < right.size(); k++) {
TreeNode node=new TreeNode(i);
node.left=left.get(j);
node.right=right.get(k);
ans.add(node);
}
}
}
}
map.put(""+s+","+e, ans);
return ans;
}
return map.get(""+s+","+e);
}
}
/**
* 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) {
return f(1,n,new HashMap<String, List<TreeNode>>());
}
public List<TreeNode> f(int s,int e,Map<String,List<TreeNode>> map) {
if (map.get(""+s+","+e)==null) {
List<TreeNode> ans=new ArrayList<TreeNode>();
if (s>e) {
ans.add(null);
}else if (s==e) {
ans.add(new TreeNode(s));
}else {
for (int i = s; i <=e; i++) {
List<TreeNode> left=f(s,i-1,map);
List<TreeNode> right=f(i+1,e,map);
for (int j = 0; j < left.size(); j++) {
for (int k = 0; k < right.size(); k++) {
TreeNode node=new TreeNode(i);
node.left=left.get(j);
node.right=right.get(k);
ans.add(node);
}
}
}
}
map.put(""+s+","+e, ans);
return ans;
}
return map.get(""+s+","+e);
}
}
相关文章推荐
- virtualbox增强功能-VBoxGuestAdditions安装
- quick 3.3加载Spine问题,quick3.3加载spine
- Android view中的requestLayout和invalidate方法
- easyUI合并行的单元格
- java.lang.IllegalArgumentException: addChild: Child name '/SSHE' is not unique
- Caused by: java.lang.IllegalArgumentException: addChild: Child name 'localhost' is not unique
- confluence 配置
- UITableView topview渐变的效果
- UIScrollView
- 如何隐藏UITableView中底部多余的空白行
- DuiLib响应按钮事件
- DuiLib响应按钮事件
- easyUI的行内编辑editor
- iOS UIActivityIndicatorView
- UI 设计师提供 iOS 字体和长度应当用什么单位
- UITableViewCell与cell之间的那条线
- StringBuilder与StringBuffer的区别(转)
- easyUI中的datagrid的formatter方法中 使用$.ajax()方法绑定多个不同数据源的数据
- DelayQueue Demo
- NYOJ 686 An Interesting Sequence 【欧拉函数】