快手手撕题求解

今天面试快手手撕代码被狂虐
给一个数字n,求总节点数为n的满二叉树(满二叉树:树中除了叶子节点,每个节点都有两个子节点)的集合,返回一个List<TreeNode>,把每个不同构造的root节点存入
我写了一个递归遍历,先给传入的节点一个左节点和右节点,然后递归左节点再递归右节点,再删除两个子树,每次递归让n-2,当n==0时,克隆root节点存入list
大概就是
void fun(TreeNode node , n){
n -= 2;
if(n == 0){
    list.add(root.clone());
    return;
}
node.left = new TreeNode();
node.right = new TreeeNode();
fun(node.left,n)
fun(node.right,n)
node.left = null
node.right = null
}
这个思路,遍历所有情况,然后被说复杂度太高了,有没有大神说一下这个怎么优化

#快手#
全部评论
递归一般存在重复计算某些东西,考虑用数组来存一些东西?(菜鸡回答0.0)
点赞 回复 分享
发布于 2018-10-12 19:17
复杂度n的阶乘其实是蛮糟糕的复杂度了 不过说实话我没看懂你的题是什么意思
点赞 回复 分享
发布于 2018-10-15 12:56
没看懂这代码的思路是啥。。。你这时间复杂度是多少?要返回所有结果复杂度应该至少n的阶乘吧
点赞 回复 分享
发布于 2018-10-12 19:35
这个问题看着好奇怪
点赞 回复 分享
发布于 2018-10-12 19:30
同学你是什么岗位
点赞 回复 分享
发布于 2018-10-12 19:25

相关推荐

头像
05-16 11:16
已编辑
东华理工大学 Java
牛客737698141号:盲猜几十人小公司,庙小妖风大,咋不叫她去4️⃣呢😁
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务