Unique Binary Search Trees
Given n, how many structurally unique BST's (binary search trees) that store values 1...n?
难度:medium
Solution: Dynamic Programming
public class Solution {
public int numTrees(int n) {
int[] trees = new int[n + 1];
trees[0] = 1;
trees[1] = 1;
for(int i = 2; i <= n; ++i) {
for(int j = 1; j <= i; ++j) {
trees[i] += trees[j - 1] * trees[i - j];
}
}
return trees[n];
}
}
Unique Binary Search Trees II
Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n.
难度:medium
Solution: Recursive
/**
* 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 < 1) {
return new ArrayList<TreeNode>();
}
return generateTreesHelper(1, n);
}
private List<TreeNode> generateTreesHelper(int start, int end) {
List<TreeNode> res = new ArrayList<>();
if(start > end) {
res.add(null);
return res;
}
for(int i = start; i <= end; ++i) {
List<TreeNode> lefts = generateTreesHelper(start, i - 1);
List<TreeNode> rights = generateTreesHelper(i + 1, end);
for(TreeNode left : lefts) {
for(TreeNode right : rights) {
TreeNode root = new TreeNode(i);
root.left = left;
root.right = right;
res.add(root);
}
}
}
return res;
}
}