【问题标题】:About orientation in splay trees in Robert Sedgweick关于 Robert Sedgweick 中张开树的方向
【发布时间】:2014-05-11 14:55:51
【问题描述】:

我正在阅读由 Robert Sedgwick 撰写的关于张开树的文章。以下是部分中的文本 sn-p

在根插入方法中,我们通过左右旋转实现了将新插入的节点带到树的根的主要目标。在本节中,我们将研究如何修改根插入,以使旋转在某种意义上也平衡树。

我们不考虑(递归地)将新插入的节点带到树顶部的单个旋转,而是考虑将节点从作为根的孙子之一的位置带到树顶部的两个旋转那个树。首先,我们执行一次旋转以使节点成为根的子节点。然后,我们执行另一个旋转将其带到根。有两种本质上不同的情况,这取决于从根到要插入的节点的两条链接是否以相同的方式定向。 . Splay BST 基于以下观察结果:当从根到要插入的节点的链接以相同方式定向时,还有另一种方法可以继续:只需在根处执行两次旋转。

更多信息请参见以下链接的幻灯片 4

http://www.cs.princeton.edu/courses/archive/spr04/cos226/lectures/balanced.4up.pdf

我的问题是

  1. 作者在这里所说的方向是什么意思?

  2. 请求给出方向不同和方向匹配的示例。

谢谢

【问题讨论】:

    标签: algorithm binary-search-tree


    【解决方案1】:

    方向仅仅意味着左或右孩子。

      A
     / \
    B   C
       / \
      D   E
    

    E 是相同方向情况的示例 - C 是 A 的右孩子,E 又是 C 的右孩子。D 是不同方向的示例,因为 D 是 C 的左孩子,但 C 是右孩子A的孩子。

    所以你可以描述所有节点相对于根节点A的方向如下。

    B left
    C right
    D right left
    E right right
    

    【讨论】:

    • 不是 D 是左左,因为 D 是 B 的左,B 是 A 的左。与 E 类似,它是左右。
    • 不,重要的是节点与其父节点之间的关系。所以充其量你可以说 B 是 A 的左后裔, D 是 A 的右后裔,但这在这里并不重要。 D 是右左,因为你必须先向右再向左才能从 A 到达它。
    【解决方案2】:

    假设您正在访问节点n,其父节点为p,其祖父节点为g。如果n 和p 都是其父级的左子或右子,则方向相同。

    因此,例如,如果p 是g 的右孩子,而n 是p 的左孩子,则方向不一样。如果p 是g 的右孩子,n 是p 的右孩子,则方向相同。

    【讨论】:

      猜你喜欢
      • 2016-06-29
      • 2015-06-23
      • 2011-04-19
      • 1970-01-01
      • 2011-10-09
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多