严蔚敏版数据结构错误还是我的错误?

laraya 2008-11-28 07:18:30
二叉树那章,第131页书的原话这样:
不论按那一种次序进行遍历,对含n个节点的二叉树,其时间复杂度均为O(n)。所需辅助空间为遍历过程中栈的最大容量,即树的
深度,最坏情况下为n,则空间复杂度也为O(n)。
其中我觉得有错误的是这句话:最坏情况下为n,
事实上如果按先序非递归遍历时候,利用栈,我们在算法上能做到栈的最大容量只需要二叉树的深度减去1,即最坏情况下为n-1;
大家说是这样吗?
...全文
161 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahjoe 2008-11-29
  • 打赏
  • 举报
回复
这个,不需要这么精确!就像O(N),你咱不说是O(N-1)呢
chuchuzinnia 2008-11-29
  • 打赏
  • 举报
回复
up
laraya 2008-11-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 C1053710211 的回复:]
LZ认为需要n-1的空间是不是因为最后一个结点的是叶子结点所以可以不用进栈呢,
但是当我们编写程序时,无论是递归的还是非递归的,遍历到这个结点时我们第一个操作是什么呢,
是进栈操作,而对于这个结点是否是叶子结点的判断是在递归的下一次函数调用或者是非递归的下一次取栈顶元素时判断,
如果想LZ那样认为的话,在每当遍历到一个结点时就需要判断这个结点是否左右孩子都为空,如果是的话就不用进栈了,
于是就有在最…
[/Quote]
我的算法是栈只入右孩子,能做到入栈次数较少,并且栈容量也很小,但算法确实增加了一个判断条件,
即是如果结点的右孩子非空则右孩子入栈.
说的应该有道理。
C1053710211 2008-11-29
  • 打赏
  • 举报
回复
LZ认为需要n-1的空间是不是因为最后一个结点的是叶子结点所以可以不用进栈呢,
但是当我们编写程序时,无论是递归的还是非递归的,遍历到这个结点时我们第一个操作是什么呢,
是进栈操作,而对于这个结点是否是叶子结点的判断是在递归的下一次函数调用或者是非递归的下一次取栈顶元素时判断,
如果想LZ那样认为的话,在每当遍历到一个结点时就需要判断这个结点是否左右孩子都为空,如果是的话就不用进栈了,
于是就有在最后一个操作时没有进栈,用到了n-1个空间,但是每次都这么判断的话是会降低程序效率的,
试想那些非叶子结点都要经历这个判断对于他们是毫无意义的,增加了开销。
妄自猜测
oyzdz1988 2008-11-28
  • 打赏
  • 举报
回复
有必要这么细吗,也许是书的错误吧

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧