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

时间:2015-02-03 16:36:46

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

路径只保存当前节点的父节点,因此不会出现最终持有整个树的情况。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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

相关问题