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