有关在展开树中删除的清晰度

时间:2017-10-02 11:06:05

标签: python-3.x data-structures splay-tree

我正在为splay树编写代码,但我对splay树的删除方面有疑问。在互联网上研究之后,我发现了这个:

首先搜索要删除的元素并将其展开到顶部。然后执行以下操作

  1. 如果根(在将元素展示到顶部之后)同时具有左右子,则删除根,使得您现在有两个子树。在左子树中,找到最大的元素并将其展开到顶部然后将它连接到右子树的根。
  2. 如果root没有左子,但有一个正确的子,则删除root并将右子树的根作为新根。
  3. 但是如果根没有合适的孩子会怎么样?所以我删除了root并将左子树的根作为新根?

    我还需要照顾其他任何条件吗?

    如果有帮助,我已经在下面写了删除代码。

    def delete(self,key):
        res = self.get(key) #The get() function also does the splaying operation as well
        if res:
            ls = self.root.leftChild
            rs = self.root.rightChild
            if ls is not None and rs is not None: #has both the child
                ls.parent = None
                rs.parent = None
                current = ls
                while ls.hasRightChild():
                    current = current.rightChild #find the largest element
                self.get(current.key)
                rs.parent = current
                current.rightChild = rs
                self.root = current
            elif ls is None and rs is not None: #has no left child
                rs.parent = None
                self.root = rs
            elif ls is None and rs is None: #has no left or right child ie the tree contains only one node
                self.root = None
        else:
            return
    

0 个答案:

没有答案