我努力学习二叉搜索树的实现在Python用以下链接Binary Search Tree in Python问题有二叉搜索树在Python
我无法正确地执行删除方法的帮助下删除方法。
这里是我的代码:
class Node:
def __init__(self,data):
self.data=data
self.left=None
self.right=None
def Insert_BTreeNode(self,data):
if self.data:
if data<self.data:
if self.left is None:
self.left=Node(data)
else:
self.left.Insert_BTreeNode(data)
elif data>self.data:
if self.right is None:
self.right=Node(data)
else:
self.right.Insert_BTreeNode(data)
else:
self.data=data
def Lookup(self,data,parent=None):
if data<self.data:
if self.left is None:
return None,None
return self.left.Lookup(data,self)
elif data>self.data:
if self.right is None:
return None,None
return self.right.Lookup(data,self)
else:
print(self.data,parent.data)
def Children_count(self):
count=0
if self.left:
count+=1
if self.right:
count+=1
print(count)
def Delete(self,data):
children_count=0
node=self.Lookup(data)
parent=None
if node is not None:
children_count=node.Children_count()
if children_count==0:
if parent:
if parent.left is Node:
parent.left=None
else:
parent.right=None
del Node
else:
self.data=data
def print_treeInorder(self):
if self.left:
self.left.print_treeInorder()
print(self.data)
if self.right:
self.right.print_treeInorder()
def print_treePostorder(self):
if self.left:
self.left.print_treePostorder()
if self.right:
self.right.print_treePostorder()
print(self.data)
def print_treePreorder(self):
print(self.data)
if self.left:
self.left.print_treePreorder()
if self.right:
self.right.print_treePreorder()
root=Node(8)
root.Insert_BTreeNode(3)
root.Insert_BTreeNode(10)
root.Insert_BTreeNode(1)
root.Insert_BTreeNode(6)
root.Insert_BTreeNode(4)
root.Insert_BTreeNode(7)
root.Insert_BTreeNode(14)
root.Insert_BTreeNode(13)
root.Delete(13)
root.print_treeInorder()
这是一种像功课,所以我会很感激,如果人们给我与我的代码解决方案,而不是外部库。
此外,我会很感激,如果任何人都可以评论哪里的代码是错误的。
在此先感谢。
你缺少在'一个else分支,如果children_count == 0' – Sekuraz
秒:函数'查找()时,搜索到的节点被发现'不返回一对夫妇'(父,个体经营)''数据== self.data'。 –
第三:函数'Children_count()'不返回'(count)'。 –