[英]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.