您的位置:首页 > 理论基础 > 数据结构算法

[数据结构] 二叉搜索树 前驱和后继的经验总结

2017-05-08 14:35 197 查看

前言

最近在看算法导论关于二叉搜索树的相关章节,关于其前驱和后继的小节,我想了好久,总结出了一点经验,想分享给大家,也是怕过一段时间自己忘记了,因此记录在此。

后继

假设x为当前节点 y为x的后继结点



总结为四种情况

x节点右节点不为NIL时 寻找x右子树中最小的节点

x节点右节点的左节点为NIL时,y为x.right 图(a)

x节点右节点左子树不为NIL时,在左子树中寻找最小的节点 图(b)

哎另一种情况不会说哎,如图(c) 图(d)

算法导论给出的伪代码

TREE-SUCCESSOR(x)
if x.right ≠ NIL
return TREE-MINIMUM(x.right) //图(a) 图(b)的情况
y = x.p
while y ≠ NIL and x == y.right  //图(c) 图(d) 和 没有后继节点的情况
x = y
y = y.p
return y


前驱

假设x为当前节点 y为x的前驱结点



上图的四种情况正好与寻找后继结点的情况相反,这里就不再赘述了

伪代码

TREE-predecessor(x)
if x.right ≠ NIL
return TREE-MAXIMUM(x.left) //图(a) 图(b)的情况
y = x.p
while y ≠ NIL and x == y.left  //图(c) 图(d) 和 没有后继节点的情况
x = y
y = y.p
return y


参考

算法导论二叉搜索树
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: