微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决不平衡树的所有路径求和问题的最坏情况空间复杂度是多少?

这是 education.io 上所述的问题陈述。

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

我了解问题的解决方案和时间复杂度部分。我的困惑在于最坏情况下的空间复杂度。输出数组的空间复杂度是针对平衡二叉树计算的,不加解释地得出结论,对于不平衡二叉树也是一样的。

这里我们有七个节点(即 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) 空间。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。