【问题标题】:Space complexity of printing all paths from root to leaf打印从根到叶的所有路径的空间复杂度
【发布时间】:2015-02-03 16:36:46
【问题描述】:

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

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

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);
}

【问题讨论】:

    标签: java algorithm binary-tree complexity-theory space-complexity


    【解决方案1】:

    如果你的树是平衡的,那么它将是O(log n)。这是因为平衡二叉树在每个后续级别上的节点数量是两倍,因此如果将树中的节点数量增加一倍,它只会增加一个额外的层。

    路径仅包含当前节点的父节点,因此您最终不会持有整个树。

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2018-01-29
          • 1970-01-01
          • 2015-05-30
          • 1970-01-01
          • 2021-09-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多