【问题标题】:Binary Search Tree Python, Implementing Delete二叉搜索树 Python,实现删除
【发布时间】:2013-12-08 00:07:27
【问题描述】:

我正在尝试在 python 中实现二叉搜索树,但我找不到删除的解决方案。如果该项目在叶子中,那很简单,但是如果我要删除的项目有 2 个孩子,而这些孩子也有其他孩子等等呢?怎样才能找到它的继任者,以便我可以替换它?有没有简单的递归解决方案?

class Node:

    def __init__(self, data=None, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right    


class BinarySearchTree:


    def __init__(self, root=None):
        self.root = Node(root)


    def add(self, data, node):

        if node == None:
            node = Node(data)
            return True

        if data < node.data:
            if node.left == None:
                node.left = Node(data)
                return True
            else:
                self.add(data, node.left)
        elif data > node.data:
            if node.right == None:
                node.right = Node(data)
                return True
            else:
                self.add(data, node.right)


    def preorder(self, node):
        if node != None:
            print(node.data)
            self.preorder(node.left)
            self.preorder(node.right)

    def inorder(self, node):
        if node != None:
            self.inorder(node.left)
            print(node.data)
            self.inorder(node.right)

    def postorder(self, node):
        if node != None:
            self.postorder(node.left)
            self.postorder(node.right)
            print(node.data)


    def retreive(self,item):

        node = self.root

        while node != None:
            if node.data == item:
                break
            elif item < node.data:
                if node.left != None:
                    if node.left.data == item:
                        node.left = None
                        return True
                node = node.left
            else:
                if node.right != None:
                    if node.right.data == item:
                        node.right= None
                        return True
                node = node.right

        if node == None:                
            return False

tree = BinarySearchTree()
root=Node(3)
tree.add(55,root)
tree.add(5,root)
tree.add(13,root)
tree.add(2,root)
tree.add(3,root)
tree.preorder(root)
tree.postorder(root)
tree.inorder(root)

另外,如果您对我目前所写的内容有任何建议,我将不胜感激。提前致谢。

【问题讨论】:

标签: python recursion tree implementation binary-search-tree


【解决方案1】:

如果这不是家庭作业,您可以使用以下方法之一:

  1. https://pypi.python.org/pypi/treap/
  2. https://pypi.python.org/pypi/red-black-tree-mod

两者都实现删除。两者都可以很好地处理已排序或未排序的输入。

红黑树模块有一个 RedBlackTree 继承自的 BinaryTree 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-04
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多