【问题标题】:Can I use a recursive algorithm for the implementation of a Splay tree?我可以使用递归算法来实现 Splay 树吗?
【发布时间】:2012-11-05 19:21:16
【问题描述】:

我一直在研究 Splay 树,因为我想实现一个。目前,我对红黑树、AVL 树、跳过列表和其他更简单的数据结构有一些“自学”经验。我想实现我的第一个伸展树,但如果可能的话,我想要一个递归实现(我喜欢递归)。

但是,我认为这很困难,因为您必须在树下查看两个级别才能观察所有可能的情况(zig-zag、zig-zig、zar),并且没有其他字段就无法标记目标。我是否应该使用另一个字段,例如在红黑树中,来标记访问的节点并展开目标节点?

【问题讨论】:

    标签: algorithm data-structures implementation


    【解决方案1】:

    使用递归算法很容易,而且看起来相当干净。不需要标记。请记住,展开操作(用于查找、插入和删除)将目标节点带到树的顶部;换句话说,它返回目标节点位于顶部的(展开的)树。

    本质上,您需要从给定节点决定接下来的两次移动是什么(左右移动或其他任何移动)。当您向同一方向移动两次时会发生旋转。

    在 Chris Okasaki 的 Purely Functional Data Structures 中有一个很好的函数式语言实现,恕我直言,这是现存最好的 CS 短文之一。

    【讨论】:

      【解决方案2】:

      在维基百科上,您可以找到一篇关于展开树的非常好的文章。你不应该喜欢递归,因为递归很容易失控,最好使用迭代。

      【讨论】:

        猜你喜欢
        • 2014-08-13
        • 1970-01-01
        • 1970-01-01
        • 2021-02-04
        • 2019-09-21
        • 1970-01-01
        • 1970-01-01
        • 2012-04-12
        • 1970-01-01
        相关资源
        最近更新 更多