簡體   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