微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python中的二进制搜索树中的删除问题

如何解决Python中的二进制搜索树中的删除问题

我无法删除我的二进制搜索树的根。其余所有节点都可以删除,但是Root遇到了一些问题,非常感谢您帮助我进行一些小的更改。我在某些网站上看到过,它说要以 None 开头的root,然后再开始加数字,但即使这样也不起作用。 它说您不能添加一个nonetype。 这是我的代码

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

    def insert(self,root_insert,key):
        if root_insert is None:
            return BST(key)
        else:
            if root_insert.data == key:
                return root_insert
            elif root_insert.data < key:
                root_insert.right = self.insert(root_insert.right,key)
            else:
                root_insert.left = self.insert(root_insert.left,key)
        return root_insert

    def find_val(self,data):
        if data < self.data:
            if self.left is None:
                return str(data) + " Not Found"
            return self.left.find_val(data)
        elif data > self.data:
            if self.right is None:
                return str(data) + " Not Found"
            return self.right.find_val(data)
        else:
            return str(self.data) + " is Found"

    def inorder(self,root_inorder):
        if root_inorder:
            self.inorder(root_inorder.left)
            print(root_inorder.data,end=" ")
            self.inorder(root_inorder.right)

    def postorder(self,root_postorder):
        if root_postorder:
            self.postorder(root_postorder.left)
            self.postorder(root_postorder.right)
            print(root_postorder.data,end=" ")

    def preOrder(self,root_preOrder):
        if root_preOrder:
            print(root_preOrder.data,end=" ")
            self.preOrder(root_preOrder.left)
            self.preOrder(root_preOrder.right)

    def deleteNode(self,root_delete,data):
        if root_delete is None:
            return root_delete
        if data < root_delete.data:
            root_delete.left = self.deleteNode(root_delete.left,data)
        elif data > root_delete.data:
            root_delete.right = self.deleteNode(root_delete.right,data)
        else:
            if root_delete.left is None:
                temp = root_delete.right
                return temp

            elif root_delete.right is None:
                temp = root_delete.left
                return temp

            root_delete.data = self.min_value_node(root_delete.right)
            root_delete.right = self.deleteNode(root_delete.right,root_delete.data)
        return root_delete

    def min_value_node(self,node):
        current = node
        while current.left is not None:
            current = current.left
        return current


    root = BST(12)
    root = root.insert(root,6)
    root = root.insert(root,14)
    root = root.insert(root,3)
    root = root.insert(root,70)
    root = root.insert(root,15)
    root = root.insert(root,35)
    root = root.insert(root,30)
    root = root.insert(root,31)
    print("********IN ORDER********")
    root.inorder(root)
    print("\n********PRE ORDER********")
    root.preOrder(root)
    print("\n********POST ORDER********")
    root.postorder(root)
    print("")
    print(root.find_val(7))
    print(root.find_val(14))
    root.deleteNode(root,6)
    print("********IN ORDER********")
    root.inorder(root)
    root.deleteNode(root,14)
    print("\n********IN ORDER********")
    root.inorder(root)
    root.deleteNode(root,3)
    print("\n********IN ORDER********")
    root.inorder(root)
    root.deleteNode(root,70)
    print("\n********IN ORDER********")
    root.inorder(root)
    root.deleteNode(root,15)
    print("\n********IN ORDER********")
    root.inorder(root)
    root.deleteNode(root,30)
    print("\n********IN ORDER********")
    root.inorder(root)
    
    root.deleteNode(root,31)
    print("\n********IN ORDER********")
    root.inorder(root)
    root.deleteNode(root,35)
    print("\n********IN ORDER********")
    root.inorder(root)
    root.deleteNode(root,12)
    print("\n********IN ORDER********")
    root.inorder(root)
    
    root.deleteNode(root,12)
    print("\n********IN ORDER********")
    root.inorder(root)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。