中山大学数据结构课件第08章查找-1.ppt

中山大学数据结构课件第08章查找-1

用一个布尔变量shorter(缩短)来指明子树高度是否被缩短。在每个结点上要做的操作取决于 shorter的值和结点的bf,有时还要依赖子女的bf。 布尔变量shorter的值初始化为True。然后对于从x的双亲到根的路径上的各个结点p,在 shorter保持为True时执行下面操作。如果 shorter变成False,算法终止。 当前结点 p 的bf为0。如果它的左子树或右子树被缩短,则它的bf改为-1或1,同时 shorter置为False。 删除后不旋转 结点 p 的 bf 不为0且较高的子树被缩短。则 p 的 bf 改为0,同时shorter置为True。 p 0 h h h-1 p -1 h h-1 删除后不旋转 p 1 h h-1 p 0 h-1 h-1 结点 p 的 bf 不为0,且较矮的子树又被缩短。则在结点 p 发生不平衡。需要进行平衡化旋转来恢复平衡。 令 p 的较高的子树的根为 q(该子树未被缩短),根据 q 的 bf,有如下 3 种平衡化操作。 旋转的方向取决于是结点 p 的哪一棵子树被缩短。 如果 q(较高的子树)的 bf 为0,执行一个单旋转来恢复结点 p 的平衡,置shorter为False。无需检查上层结点的平衡因子。 左单旋转 -1 h h-1 p h q 1 -1 h h h-1 p h 0 q 如果 q 的 bf 与 p 的 bf 相同,

文档评论(0)

1亿VIP精品文档

相关文档