题目为 给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。
就是递归遍历,代码如下
public IList<TreeNode> GenerateTrees(int n)
{
if (n==0)
{
return new List<TreeNode>();
}
return GetAllTree(1, n);
}
public List<TreeNode> GetAllTree(int start,int end)
{
List<TreeNode> tree = new List<TreeNode>();
if (start>end)
{
tree.Add(null);
return tree;
}
for (int i = start; i <= end; i++)
{
List<TreeNode> left = GetAllTree(start, i - 1);
List<TreeNode> right = GetAllTree(i+1, end);
for (int l= 0; l < left.Count(); l++)
{
for (int r = 0; r < right.Count(); r++)
{
TreeNode treeParent = new TreeNode(i);
treeParent.left = left[l];
treeParent.right = right[r];
tree.Add(treeParent);
}
}
}
return tree;
}