【发布时间】:2018-07-21 12:38:50
【问题描述】:
我正在尝试从 BST 中删除最小节点,因此我在树中搜索直到获得最小值(当 root.leftnode 为 None 时),然后将 root.rightnode 设置为根本身以继续 BST。
问题是当我在执行此操作后检查树时,它并没有显示曾经发生过删除。
请有人指出我正确的方向,任何建议表示赞赏。
class node():
def __init__(self, key, data):
self.data = data
self.key = key
self.leftnode = None
self.rightnode = None
self.count = 1
class binarysearch():
def __init__(self):
self.size = 0
self.rootnode = None
def insert(self, key, data):
if self.rootnode is None:
self.rootnode = node(key, data)
else:
self.insertnode(self.rootnode, key, data)
def getroot(self):
return self.rootnode
def insertnode(self, root, key, data):
if root.key == key:
root.data = data
elif key < root.key:
if root.leftnode is None:
root.leftnode = node(key, data)
else:
self.insertnode(root.leftnode, key, data)
else:
if root.rightnode is None:
root.rightnode = node(key, data)
else:
self.insertnode(root.rightnode, key, data)
root.count = 1 + self.sizenode(root.leftnode) + self.sizenode(root.rightnode)
def inorder(self, root):
if root is not None:
self.inorder(root.leftnode)
print(root.key)
self.inorder(root.rightnode)
def deletemin(self):
if self.rootnode is None:
print("No nodes exist")
else:
self.deleteminnode(self.rootnode.leftnode)
def deleteminnode(self, root):
if root.leftnode is not None:
self.deleteminnode(root.leftnode)
else:
print (root.key, "deleted")
root = root.rightnode
if __name__ == '__main__':
a = binarysearch()
a.insert(7,7)
a.insert(1,1)
a.insert(8,8)
a.insert(3,3)
a.insert(9,9)
a.insert(2,2)
a.insert(4,4)
a.insert(11,11)
a.insert(10,10)
a.deletemin()
a.getnodes()
【问题讨论】:
-
这个想法应该是当它的'left node'->'left node'等于None。然后将其左节点设置为None......
-
不确定你的意思,我检查左边的节点什么时候是None,然后我知道我有最小的节点,但是右边可能有东西所以我将正确的东西设置为节点本身?
标签: python binary-search-tree minimum