二叉树的前中后序遍历的空间复杂度是O(logN)

深度遍历的空间复杂度取决于树的高度,树的高度是h,栈的深度就是h乘以一个常数。最坏情况当然是O(n)的,但在随机情况下是不会发生的,只有在元素出现次序本身具有某些规律的情况才会发生。你的代码可能是这样的:void puttree(tree t){ if(t!=NULL){ put(t-\u0026gt;data); puttree(t-\u0026gt;left); puttree(t-\u0026gt;right); }}在有尾递归优化的情况下,最后一条语句不用压栈,不占用栈空间,因此空间复杂度为S(n)=S(left)+1在平衡的时候,left=n/2,S(n)=S(n/2)+1,得S(n)=O(logn)在树严重向左偏,left=n-1,S(n)=S(n-1)+1,得S(n)=O(n) 当树严重向右偏,left=1,S(n)=S(1)+1,得S(n)=O(1)
■网友
回答成O(h)就没问题了,h为二叉树高度
平均情况下,h=logn,即O(logn)
【二叉树的前中后序遍历的空间复杂度是O(logN)】 最坏情况下,h=n,即O(n)

■网友
平均是O(logN)但是最坏情况下退化成O(N)吧,当然如果用平衡树的话就能保证最坏也O(logN)了。


    推荐阅读