[LeetCode]Unique Binary Search Trees I&II
2017-01-22 01:06
429 查看
Unique Binary Search Trees
https://leetcode.com/problems/unique-binary-search-trees/
有多少unique的二叉搜索树是由1 ~ n的所有值构成的节点组成的
public class Solution {
public int numTrees(int n) {
int[] dp = new int[n + 1];
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <=n; i++) {
for (int j = 1; j <= i; j++) {
// 当往原有的树中插入一个更大的node时,实际插入位置将原有的树分成node数位j - 1和i - j的两个部分
dp[i] += (dp[j - 1] * dp[i - j]);
}
}
return dp
;
}
}
Unique Binary Search Trees II
https://leetcode.com/problems/unique-binary-search-trees-ii/
返回I中这些二叉搜索树的根节点List
递归调用,递归函数传入参数为当前二叉搜索树中节点值的起始beg和末尾end值。在函数中遍历beg和end,以[beg, end]中的值mid为root,则root.left为[beg, mid - 1], root.right为[mid + 1, end]
/**
* 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) {
if (n <= 0) {
return new LinkedList();
}
return generate(1, n);
}
private List<TreeNode> generate(int beg, int end) {
List<TreeNode> list = new LinkedList();
if (beg > end) {
list.add(null);
return list;
}
if (beg == end) {
TreeNode node = new TreeNode(beg);
list.add(node);
return list;
}
for (int i = beg; i <= end; i++) {
List<TreeNode> llist = generate(beg, i - 1);
List<TreeNode> rlist = generate(i + 1, end);
for (TreeNode left : llist) {
for (TreeNode right :rlist) {
TreeNode root = new TreeNode(i);
root.left = left;
root.right = right;
list.add(root);
}
}
}
return list;
}
}
https://leetcode.com/problems/unique-binary-search-trees/
有多少unique的二叉搜索树是由1 ~ n的所有值构成的节点组成的
public class Solution {
public int numTrees(int n) {
int[] dp = new int[n + 1];
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <=n; i++) {
for (int j = 1; j <= i; j++) {
// 当往原有的树中插入一个更大的node时,实际插入位置将原有的树分成node数位j - 1和i - j的两个部分
dp[i] += (dp[j - 1] * dp[i - j]);
}
}
return dp
;
}
}
Unique Binary Search Trees II
https://leetcode.com/problems/unique-binary-search-trees-ii/
返回I中这些二叉搜索树的根节点List
递归调用,递归函数传入参数为当前二叉搜索树中节点值的起始beg和末尾end值。在函数中遍历beg和end,以[beg, end]中的值mid为root,则root.left为[beg, mid - 1], root.right为[mid + 1, end]
/**
* 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) {
if (n <= 0) {
return new LinkedList();
}
return generate(1, n);
}
private List<TreeNode> generate(int beg, int end) {
List<TreeNode> list = new LinkedList();
if (beg > end) {
list.add(null);
return list;
}
if (beg == end) {
TreeNode node = new TreeNode(beg);
list.add(node);
return list;
}
for (int i = beg; i <= end; i++) {
List<TreeNode> llist = generate(beg, i - 1);
List<TreeNode> rlist = generate(i + 1, end);
for (TreeNode left : llist) {
for (TreeNode right :rlist) {
TreeNode root = new TreeNode(i);
root.left = left;
root.right = right;
list.add(root);
}
}
}
return list;
}
}
相关文章推荐
- 几款Git GUI客户端工具
- Uva12166 Equilibrium Mobile 【递归建树】【习题6-6】
- Command and Query Responsibility分离模式
- Command and Query Responsibility分离模式
- UITableViewCell改变里面控件颜色时的注意点
- Vue.js - 0
- EasyUI datagrid
- UGUI实现不规则区域点击响应
- iOS UICollectionView 点击事件
- TrueView广告
- SAPUI5 (17) - 数据校验
- 解析Vue.js是什么?
- iOS开发-UI (一)补充 UIWindow UIView UIlabel
- 优先队列priority_queue 用法详解 +poj 2442 Sequence
- spoj 375 Query on a tree——(树链剖分orLCT动态树)
- iOS开发-UI (七)view层次动画 和 ImageView
- request.setAttribute()和request.getAttribute()方法
- Confluence安装&破解&汉化
- request 转换成对象
- vue-cli的webpack模版,相关配置文件dev-server.js与webpack.config.js配置解析