LeetCode95.不同的二叉搜索树II
题目
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int x) { val = x; }
* }
*/
public class Solution
{
public List<TreeNode> generate_trees(int start, int end)
{
List<TreeNode> all_trees = new List<TreeNode>();
if (start > end)
{
all_trees.Add(null);
return all_trees;
}
for (int i = start; i <= end; i++)
{
List<TreeNode> left_trees = generate_trees(start, i - 1);
List<TreeNode> right_trees = generate_trees(i + 1, end);
foreach (TreeNode l in left_trees)
{
foreach (TreeNode r in right_trees)
{
TreeNode current_tree = new TreeNode(i);
current_tree.left = l;
current_tree.right = r;
all_trees.Add(current_tree);
}
}
}
return all_trees;
}
public IList<TreeNode> GenerateTrees(int n)
{
if (n == 0)
return new List<TreeNode>();
return generate_trees(1, n);
}
}