0
class Node:
def __init__(self,value = None):
self.value = value
self.left = None
self.right = None
class BinarySearchTree:
def __init__(self):
self.root = None
def insert(self,value):
if self.root != None:
self._insert(self.root,value)
else:
self.root = Node(value)
def _insert(self,current,value):
if value < current.value:
if current.left == None:
current.left = Node(value)
else:
self._insert(current.left,value)
elif value > current.value:
if current.right == None:
current.right = Node(value)
else:
self._insert(current.right,value)
else:
print("Value already exist in tree.")
def delete(self,current,value):
if current == None: return current
elif value < current.value: current.left = self.delete(current.left,value)
elif value > current.value: current.right = self.delete(current.right,value)
else:
if current.left == None and current.right == None:
current = None # case 0
elif current.left == None: return current.right # case 1r
elif current.right == None: return current.left # case 1l
else: # case 2
temp = self.min(current.right)
current.value = temp
self.delete(current.right,temp)
return current
def min(self,current):
if current != None:
return self._min(current)
else:
return None
def _min(self,current):
if current.left != None:
return self._min(current.left)
else:
return current.value
if __name__ == '__main__':
for i in (12,5,18,3,4,6):
tree.insert(i)
tree.delete(tree.root,12)
안녕하세요, 이진 검색 트리의 삭제 기능은 두 자녀가있는 노드에서 작동하지 않으므로 도움이됩니다.이진 검색 트리에 대한 삭제 기능이 파이썬에서 작동하지 않습니다.
이 문제는 삭제 기능의 6 번과 12 번 줄로 인해 발생하며, 여기서 self.delete(current.right,temp)
줄은 current = None # case 0
이됩니다. 라인 current = None # case 0
은 전류 값을 0으로 변경하지 않습니다. 이것은 매우 혼란 스럽습니다. 어떤 생각이 잘못된거야?
이렇게하면 함수에 전달한 값이 아닌 'current'만 로컬에 설정됩니다. 그게 네가 예상했던 거라고 생각해? – Jeronimo