Python 二叉搜索树的remove方法不起任何作用 类二进制节点: 定义初始值(自身,值): self.data=值 self.left=无 self.right=无 def包含(根,值): 如果root为None: 返回错误 如果值==root.data: 返回真值 如果值根数据: 如果root.right为无: root.right=BinaryNode(值) 其他: 返回插入(root.right,value) 其他: 如果root.left为无: root.left=二进制节点(值) 其他: 返回插入(root.left,值) def getMin(根目录): 如果root.left为无: 返回root.data 返回getMin(root.left) def删除(根、值、父项=无): 如果root为None: 返回错误 elif值root.data和root.right不是无: 返回删除(root.right、value、root) 其他: 如果parent.left不是None,parent.right是None和\ root.left为无,root.right为无: 根=无 parent.left=根 def索引(根): 如果root不是None: 顺序(根.左) 打印(root.data) 顺序(root.right) b=二进制节点(10) 插入(b,8) 插入(b,11) 移除(b,11) 顺序(b)
我正在为二叉搜索树编写删除函数,我100%肯定这是正确的实现逻辑。我实现了删除叶节点的最基本情况。这个问题必须与python相关吗?当我尝试删除11时,它仍在按顺序遍历中打印它。删除节点的逻辑缺少必要的步骤。请在下面找到删除节点的代码:Python 二叉搜索树的remove方法不起任何作用 类二进制节点: 定义初始值(自身,值): self.data=值 self.left=无 self.right=无 def包含(根,值): 如果root为None: 返回错误 如果值==root.data: 返回真值 如果值根数据: 如果root.right为无: root.right=BinaryNode(值) 其他: 返回插入(root.right,value) 其他: 如果root.left为无: root.left=二进制节点(值) 其他: 返回插入(root.left,值) def getMin(根目录): 如果root.left为无: 返回root.data 返回getMin(root.left) def删除(根、值、父项=无): 如果root为None: 返回错误 elif值root.data和root.right不是无: 返回删除(root.right、value、root) 其他: 如果parent.left不是None,parent.right是None和\ root.left为无,root.right为无: 根=无 parent.left=根 def索引(根): 如果root不是None: 顺序(根.左) 打印(root.data) 顺序(root.right) b=二进制节点(10) 插入(b,8) 插入(b,11) 移除(b,11) 顺序(b),python,binary-search-tree,Python,Binary Search Tree,我正在为二叉搜索树编写删除函数,我100%肯定这是正确的实现逻辑。我实现了删除叶节点的最基本情况。这个问题必须与python相关吗?当我尝试删除11时,它仍在按顺序遍历中打印它。删除节点的逻辑缺少必要的步骤。请在下面找到删除节点的代码: class BinaryNode: def __init__(self, value): self.data = value self.left = None self.right = None def contains(root, v
class BinaryNode:
def __init__(self, value):
self.data = value
self.left = None
self.right = None
def contains(root, value):
if root is None:
return False
if value == root.data:
return True
if value < root.data:
return contains(root.left, value)
else:
return contains(root.right, value)
def insert(root, value):
if root is None:
root = BinaryNode(value)
else:
if value > root.data:
if root.right is None:
root.right = BinaryNode(value)
else:
return insert(root.right, value)
else:
if root.left is None:
root.left = BinaryNode(value)
else:
return insert(root.left, value)
def getMin(root):
if root.left is None:
return root.data
return getMin(root.left)
def remove(root, value, parent = None):
if root is None:
return False
elif value < root.data and root.left is not None:
return remove(root.left, value, root)
elif value > root.data and root.right is not None:
return remove(root.right, value, root)
else:
if parent.left is not None and parent.right is None and \
root.left is None and root.right is None:
root = None
parent.left = root
def inorder(root):
if root is not None:
inorder(root.left)
print(root.data)
inorder(root.right)
b = BinaryNode(10)
insert(b, 8)
insert(b, 11)
remove(b,11)
inorder(b)
def删除(根、值、父项):
如果root为None:
返回错误
elif值root.data和root.right不是无:
返回删除(root.right、value、root)
其他:
如果值==root.data:
如果root.right不是None:
removeRoot=root.right
而(removoot.left不是None):
帕罗托
removoot=removoot.left
root.data=removoot.data
parRoot.left=无
脱根
elif root.left不是无:
parent.left=root.left
德尔根
其他:
如果parent.right不是None且parent.right.data==root.data:
parent.right=无
elif parent.left不是无:
parent.left=无
德尔根
您是否逐行调试了remove函数的功能?我认为该函数缺少实际删除内容的大部分代码。
def remove(root, value, parent):
if root is None:
return False
elif value < root.data and root.left is not None:
return remove(root.left, value, root)
elif value > root.data and root.right is not None:
return remove(root.right, value, root)
else:
if value == root.data:
if root.right is not None:
removeRoot = root.right
while(removeRoot.left is not None):
parRoot = removeRoot
removeRoot = removeRoot.left
root.data = removeRoot.data
parRoot.left = None
del removeRoot
elif root.left is not None:
parent.left = root.left
del root
else:
if parent.right is not None and parent.right.data == root.data:
parent.right = None
elif parent.left is not None:
parent.left = None
del root