从有序和前序遍历构造二叉树的空间复杂性

时间:2018-06-05 02:36:25

标签: python binary-tree big-o inorder preorder

这个问题是关于SPACE而不是时间复杂性。而且,这不是关于如何解决问题,因为我能够做到这一点。我试图在我的解决方案中找出算法的空间复杂性。我在Leetcode上找到了question。可以在那里找到假设和问题描述。

我理解时间复杂度,如StackOverflow post中所述,但该帖子没有谈到空间复杂性。

我在代码结束后尝试解释它。

values

因为我在递归函数中发送列表的切片,所以我使用了更多的空间。如果我们不考虑清理空间,那么我们需要O(n ^ 2)空间用于列表切片。我们可以假设我们正在清理这个空间,但是对于每个步骤,我们都会通过2n长度数组[pre& amp;所有n个步骤。如果我们考虑清理空间,那么空间复杂性是多少?

除此之外,在最坏的情况下,树可能是一个链表,因此由于递归而在调用堆栈中占用的空间也将是O(n)。

说空间复杂度是否为O(n ^ 3)是否有意义,因为每次添加到调用堆栈或我是否重复计算产生额外的功率?

1 个答案:

答案 0 :(得分:1)

代码的最差情况空间复杂度为O(n^2)。你的基本分析似乎非常正确。每次递归调用需要O(n)空间(对于切片),在最坏的情况下,您的递归深度也可能是n

由于您有两个列表或者递归调用堆栈所占用的空间,因此无需在额外的n项中相乘。最多这些问题会将其从n^2更改为2*n^2n^2 + n,而big-O表示法会忽略常数倍数和增长较慢的术语。