Algorithm 关于八字树

Algorithm 关于八字树,algorithm,data-structures,splay-tree,Algorithm,Data Structures,Splay Tree,我正在阅读MarkAllen Wesis关于数据结构和算法中的splay树的文章 八字排布策略与轮换理念类似,只是我们 在如何执行旋转方面有一点选择性。我们将 仍然沿访问路径自下而上旋转。设x为(非根) 我们正在旋转的访问路径上的节点。如果x的父 是树的根,我们只旋转x和根。这是 沿访问路径的最后一次旋转。否则,x有两个父对象 (p) 还有一个祖父母(g),有两种情况,加上对称性, 考虑。第一种情况是锯齿形的,这里x是一个右键 child和p是左子级(反之亦然)。如果是这样的话,我们 执行双重旋

我正在阅读MarkAllen Wesis关于数据结构和算法中的splay树的文章

八字排布策略与轮换理念类似,只是我们 在如何执行旋转方面有一点选择性。我们将 仍然沿访问路径自下而上旋转。设x为(非根) 我们正在旋转的访问路径上的节点。如果x的父 是树的根,我们只旋转x和根。这是 沿访问路径的最后一次旋转。否则,x有两个父对象 (p) 还有一个祖父母(g),有两种情况,加上对称性, 考虑。第一种情况是锯齿形的,这里x是一个右键 child和p是左子级(反之亦然)。如果是这样的话,我们 执行双重旋转,与AVL双重旋转完全相同。 否则,我们就有一个zig-zig情况:x和p都是左的 儿童或两者都是正确的儿童

在上面的文本中,作者所说的“有两种情况加上对称”是什么意思?给出了两种情况,但这里的对称性是什么


谢谢

我认为这只是非常基本的轴向对称:

以之字形为例,这里有两个对称树:

     g
    / \ 
    p  d
   /\
  c  x
    / \
   a   b

     g
    / \ 
   d   p
      /\
     x  c
    / \
   a   b

例如,假设一个案例是“当有问题的节点是其父节点的右子节点,父节点是祖父母的左子节点”,在这种情况下,您先进行左旋转,然后进行右旋转。因此节点将到达父节点

这种情况下的对称部分是“当所讨论的节点是其父节点的左子节点,父节点是其父节点的右子节点时”。在这种情况下,先进行右旋转,然后进行左旋转。因此节点将到达父节点

用右替换左,用左替换右,得到对称的情况

在一个八字树中只有3种旋转情况。列出它 您可以看到使用和不使用展开搜索时的运行时差异