繁体   English   中英

树 dfs 算法的空间复杂度

[英]space complexity of tree dfs algorithm

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

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 中方法的每次调用在堆栈上占用相同数量的空间。 没有办法在堆栈上分配内存(或者,至少现在还没有)。 在这个方法中,堆上没有对象被创建或销毁,所以唯一使用的空间是栈帧的空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM