I'm trying to remove make a function that deletes any element of the BST. Everything works well except the case when I try to delete the root of the tree (by the root I mean the first element of the list when printing tree pre-order). When I try to delete that element, nothing gets deleted. I'm not sure what causes this issue.
class Node:
def __init__(self, value=None):
self.value = value
self.left = None
self.right = None
def insert(self, value):
if not self.value:
self.value = value
return
if value < self.value:
if self.left:
self.left.insert(value)
return
self.left = Node(value)
return
if value > self.value:
if self.right:
self.right.insert(value)
return
self.right = Node(value)
def pre_order(self, values):
if self.value is not None:
values.append(self.value)
if self.left is not None:
self.left.pre_order(values)
if self.right is not None:
self.right.pre_order(values)
return values
def delete(self, value):
if self == None:
return self
if value < self.value:
self.left = self.left.delete(value)
return self
if value > self.value:
self.right = self.right.delete(value)
return self
if self.right == None:
return self.left
if self.left == None:
return self.right
min_larger_node = self.right
while min_larger_node.left:
min_larger_node = min_larger_node.left
self.value = min_larger_node.val
self.right = self.right.delete(min_larger_node.value)
return self
l = [1, 2, 3, 4, 5, 6]
BST = Node()
for i in l:
BST.insert(i)
before_deleting = []
print(BST.pre_order(before_deleting))
BST.delete(1)
after_deleting = []
print(BST.pre_order(after_deleting))