【发布时间】:2014-12-17 19:56:21
【问题描述】:
在 Java 中,当调用方法时,堆上的对象会被复制到堆栈上吗?考虑这段代码 -
static void mirror(Node p){
if (p!=null) {
Node temp = null;
temp = p.left;
p.left = p.right;
p.right = temp;
mirror(p.left);
mirror(p.right);
}
}
空间复杂度会是 -
- O(n),因为 Node 对象 p 在每次递归调用时都被推送/复制到堆栈上
- O(1) 因为 Node 对象已经在内存中,而 p 只是对它的引用
- O(n) 因为引用 p 在方法调用时被压入堆栈
编辑:其中 n 是树的深度
【问题讨论】:
-
2.对象不会在 Java 中隐式复制。
-
谢谢。我很感激你的 cmets。
-
if (p == null) { return; } :-p temp= null 也是多余的,因为你直接初始化它。
标签: java recursion space-complexity