Java 树dfs算法的空间复杂度

Java 树dfs算法的空间复杂度,java,algorithm,data-structures,Java,Algorithm,Data Structures,我正在评估以下反转树算法的空间复杂度: public TreeNode invertTree(TreeNode root) { if (root == null) { return null; } TreeNode right = invertTree(root.right); TreeNode left = invertTree(root.left); root.left = right; root.right = left;

我正在评估以下反转树算法的空间复杂度:

public TreeNode invertTree(TreeNode root) {
    if (root == null) {
        return null;
    }
    TreeNode right = invertTree(root.right);
    TreeNode left = invertTree(root.left);
    root.left = right;
    root.right = left;
    return root;
}

我知道空间复杂度是调用堆栈的次数,即O(h),其中h是树的高度。但我的困惑是,在调用堆栈的每一层,我们都返回一棵树,它占用了一些空间,为什么我们不计算这个空间?我认为这是因为树是由函数传入的。但是你怎么解释这个空间呢?Java是通过引用传递的,每个调用堆栈级别的引用占用了多少空间?

对象引用所需的空间是常量。它不取决于您引用的内容。引用树的根所需的空间与引用叶所需的空间相同


通常,您可以假设Java中对方法的每次调用占用堆栈上相同的空间量。没有办法在堆栈上分配内存(或者至少还没有)。在这种方法中,堆上没有创建或销毁对象,因此使用的唯一空间是堆栈帧的空间。

对象引用所需的空间是恒定的。它不取决于您引用的内容。引用树的根所需的空间与引用叶所需的空间相同

通常,您可以假设Java中对方法的每次调用占用堆栈上相同的空间量。没有办法在堆栈上分配内存(或者至少还没有)。在这个方法中,堆上没有创建或销毁对象,因此使用的唯一空间是堆栈帧的空间