如何解决如果BST中的有序后继函数取Oh,为什么在n次调用Oh函数时迭代有序遍历取On?
在BST中,获取给定节点的有序后继者需要O(h)时间复杂度,因此给定getNext()可以获取当前节点的有序继任者,您需要n次调用getNext()遍历树,使时间复杂度为O(nh)。
但是,书中给出了BST的迭代有序遍历,需要O(n)时间。我很困惑为什么会有区别。
(节点具有父指针)。
解决方法
得到有序后继者是O(h),而不是Ө(h)。仅有一半的链接将有一半的节点具有后继节点。让我们考虑遍历给定节点所需的指针解除引用的次数:
- 要遍历左侧子树的指针取消引用的数量,加上
- 要从左子树的最右边节点升起的数字=左子树的高度(最多),再加上
- 一个代表节点本身,再加上
- 下降到右子树最右边节点的数字=右子树的高度(最多),加上
- 右侧子树的编号。
所以上限是:
f(0)= 1
f(h)= f(h-1)+(h-1)+ h +(h-1)+ f(h-1)
= 2f(h-1)+ 3h-2
f(h)= 5·2 h -3h-4
且h为⌈log2n⌉,f为O(n)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。