快手手撕题求解
今天面试快手手撕代码被狂虐
给一个数字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
}
这个思路,遍历所有情况,然后被说复杂度太高了,有没有大神说一下这个怎么优化