对于不平衡树,所有路径总和问题的最坏情况空间复杂度是多少?



以下是education .io上的问题陈述。

给定一棵二叉树和一个数字' S ',求出从根到叶的所有路径,使得每条路径的所有节点值之和等于' S '。

我理解问题的解决方案和时间复杂度部分。我的困惑在于最坏情况下的空间复杂度。对于平衡二叉树,我们计算了输出数组的空间复杂度,对于不平衡二叉树,我们得出了相同的结论,没有任何解释。

这里我们有7个节点(即N = 7),因为对于二叉树,有只有一条路径可以到达任何叶节点,我们可以很容易地说二叉树中从根到叶的总路径不能超过叶数。我们知道不可能大于(N+1)/2在二叉树中的叶,因此元素的最大数目allPaths将是O((N+1)/2) = O(N)。现在,每条路径都可以其中有很多节点。对于平衡二叉树(如上所述),每个叶子节点将处于最大深度。我们知道深度(或高度)是O(logN)我们可以说,最多,每条路径可以有logN个节点。这意味着总的大小allPaths列表将是O(N*logN)。如果这棵树不平衡,我们仍然会有相同的最坏情况空间复杂度

从上面的讨论,我们可以得出结论,我们的算法总体空间复杂度为O(N*logN)。

同样,从上面的讨论中,由于对于每个叶节点,在最坏的情况下,我们必须复制log(N)个节点来存储它的路径;因此,我们算法的时间复杂度也将是O(N*logN)。

我画了一对二叉树,有7,8,9,…节点和我能够创建不平衡的树,这将需要更多的空间在输出数组比它的平衡树对应。而且,差值不会增加一个常数值。

很好,实际上是仔细检查推理,而不是相信它是正确的!

对于平衡二叉树的分析方法对于不平衡二叉树也是正确的。但是不平衡轨道的深度可以是O(N)。因此,最大空间是路径数乘以深度,也就是O(N) * O(N) = O(N^2)

对于达到最坏情况的非平衡二叉树,我们将创建一个所有节点的值为1,大小为2的幂的树。前一半的节点是一条通向右边的直线。另一半是前一半结束时的完美平衡二叉树。这棵树将有O(N/4)条权重为N/2 + log_2(N/2)的路径,并且确实需要O(N^2)的空间。

我强烈建议向他们指出错误,以便他们改正。

最新更新