我努力學習二叉搜索樹的實現在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)'。 –