您的位置:首页 > 产品设计 > UI/UE

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