繁体   English   中英

打印从根到叶的所有路径的空间复杂性

[英]Space complexity of printing all paths from root to leaf

存储路径的空间复杂度是多少? 从根到数组中特定叶的二叉树节点?

基本上,我正在寻找以下算法的空间复杂度:

public void printPath () {
    doPrint(root, new ArrayList<TreeNode>());
}


private void doPrint(TreeNode node, List<TreeNode> path) {
    if (node == null) return;

    path.add(node);

    if (node.left == null && node.right == null) {
        System.out.println("Path from root: " + root.item + " to leaf: " + node.item + " - ");
        for (TreeNode treeNode : path) {
            System.out.print(treeNode.item + " ");
        }
        System.out.println();
    }

    doPrint(node.left , path);
    doPrint(node.right, path);

    path.remove(path.size() - 1);
}

如果您的树是平衡的,则它将为O(log n) 这是因为平衡的二叉树在每个后续级别上具有两倍的节点,因此,如果将树中的节点数量增加一倍,它只会添加一个附加层。

该路径仅包含作为当前节点的父节点的节点,因此最终情况下,您将不会拥有整个树。

如果您的树完全不平衡(即每个节点只有一个或更少的子节点),那么您将最终将整个树保留在列表中,因为您必须遍历树中的每个节点才能到达单个叶子。 在这种情况下,它将是O(n)

这将是O(n)最坏的情况,因为在这种情况下,您将查看树中的每个节点(n个节点)。

您将存储从根到列表中特定叶的路径上的所有节点。

如果二叉树是高度平衡的或它是完整/完整的二叉树,则最坏情况下的时间和空间复杂度为O(log n),其中n是二叉树中的节点数。

如果我们没有任何关于二叉树类型的先验信息,那么最坏的情况是时间和空间复杂度为O(n),因为二叉树的形式可以是仅存在左子代或仅存在右子代。

暂无
暂无

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

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