p****3 发帖数: 448 | 1 咋越写越难写
我开始觉得挺简单,就是用二维表格自底向上地屁
但要走斜线,还须复制以前的二岔树.
感觉实现起来挺复杂的.
有没有更简洁的犯法啊? | g**G 发帖数: 767 | 2 不知道DP做法是啥,我是直接递归的
伪代码大概是这样
return generate (1,n)
generate (start, end)
if (start>end) result.add(null)
if (start==end) result.add(new node(start))
for (i=start to end) {
list left = generate(start, i-1)
list right = generate(i+1, end)
for (ln: left)
for (rn: right)
node n = new node(i)
n.left = ln; n.right = rn;
result.add(n)
return result
}
【在 p****3 的大作中提到】 : 咋越写越难写 : 我开始觉得挺简单,就是用二维表格自底向上地屁 : 但要走斜线,还须复制以前的二岔树. : 感觉实现起来挺复杂的. : 有没有更简洁的犯法啊?
| k*******t 发帖数: 144 | 3 和lz一样,知道思路: 用recursion, 实现要有start和end, 但就是写不出代码啊。请
求高人指点指点 | c********p 发帖数: 1969 | | v*****d 发帖数: 348 | 5 为啥难写?连我这个无敌菜鸟大妈码工都能写出来啊?
public class Solution
{
public ArrayList generateTrees(int n)
{
return generateTrees(1, n);
}
public ArrayList generateTrees(int low, int high)
{
ArrayList result = new ArrayList();
if(high
{
TreeNode node = null;
result.add(node);
return result;
}
for(int i=low; i<=high; i++)
{
ArrayList leftTrees = generateTrees(low, i-1);
ArrayList rightTrees = generateTrees(i+1, high);
for(TreeNode left: leftTrees)
{
for(TreeNode right: rightTrees)
{
TreeNode root = new TreeNode(i);
root.left= left;
root.right = right;
result.add(root);
}
}
}
return result;
}
}
【在 k*******t 的大作中提到】 : 和lz一样,知道思路: 用recursion, 实现要有start和end, 但就是写不出代码啊。请 : 求高人指点指点
| k*******t 发帖数: 144 | 6 说真的,你太谦虚啦:)
【在 v*****d 的大作中提到】 : 为啥难写?连我这个无敌菜鸟大妈码工都能写出来啊? : public class Solution : { : public ArrayList generateTrees(int n) : { : return generateTrees(1, n); : : } : :
|
|