mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-04-22 05:37:36 +00:00
enhanced del_node function
This commit is contained in:
parent
31b6a0846a
commit
6a7914073d
@ -195,20 +195,17 @@ def get_left_most(root: MyNode) -> Any:
|
|||||||
return root.get_data()
|
return root.get_data()
|
||||||
|
|
||||||
|
|
||||||
# Function to get balance factor
|
|
||||||
def get_balance(node: MyNode) -> int:
|
def get_balance(node: MyNode) -> int:
|
||||||
if node is None:
|
if node is None:
|
||||||
return 0
|
return 0
|
||||||
return get_height(node.get_left()) - get_height(node.get_right())
|
return get_height(node.get_left()) - get_height(node.get_right())
|
||||||
|
|
||||||
|
|
||||||
def get_min_value_node(node: MyNode) -> MyNode:
|
def get_min_value_node(node: MyNode) -> MyNode:
|
||||||
current = node
|
current = node
|
||||||
while current.get_left() is not None:
|
while current.get_left() is not None:
|
||||||
current = current.get_left()
|
current = current.get_left()
|
||||||
return current
|
return current
|
||||||
|
|
||||||
|
|
||||||
def del_node(root: MyNode, data: Any) -> MyNode | None:
|
def del_node(root: MyNode, data: Any) -> MyNode | None:
|
||||||
if root is None:
|
if root is None:
|
||||||
print("Nothing to delete")
|
print("Nothing to delete")
|
||||||
@ -218,9 +215,7 @@ def del_node(root: MyNode, data: Any) -> MyNode | None:
|
|||||||
root.set_left(del_node(root.get_left(), data))
|
root.set_left(del_node(root.get_left(), data))
|
||||||
elif root.get_data() < data:
|
elif root.get_data() < data:
|
||||||
root.set_right(del_node(root.get_right(), data))
|
root.set_right(del_node(root.get_right(), data))
|
||||||
else:
|
elif root.get_left() is None:
|
||||||
# Node to delete found
|
|
||||||
if root.get_left() is None:
|
|
||||||
return root.get_right()
|
return root.get_right()
|
||||||
elif root.get_right() is None:
|
elif root.get_right() is None:
|
||||||
return root.get_left()
|
return root.get_left()
|
||||||
@ -230,26 +225,24 @@ def del_node(root: MyNode, data: Any) -> MyNode | None:
|
|||||||
root.set_data(temp.get_data())
|
root.set_data(temp.get_data())
|
||||||
root.set_right(del_node(root.get_right(), temp.get_data()))
|
root.set_right(del_node(root.get_right(), temp.get_data()))
|
||||||
|
|
||||||
root.set_height(
|
root.set_height(1 + my_max(get_height(root.get_left()), get_height(root.get_right())))
|
||||||
1 + my_max(get_height(root.get_left()), get_height(root.get_right()))
|
|
||||||
)
|
|
||||||
|
|
||||||
balance = get_balance(root)
|
balance = get_balance(root)
|
||||||
|
|
||||||
# Left Left
|
# Left Left Case
|
||||||
if balance > 1 and get_balance(root.get_left()) >= 0:
|
if balance > 1 and get_balance(root.get_left()) >= 0:
|
||||||
return right_rotation(root)
|
return right_rotation(root)
|
||||||
|
|
||||||
# Left Right
|
# Left Right Case
|
||||||
if balance > 1 and get_balance(root.get_left()) < 0:
|
if balance > 1 and get_balance(root.get_left()) < 0:
|
||||||
root.set_left(left_rotation(root.get_left()))
|
root.set_left(left_rotation(root.get_left()))
|
||||||
return right_rotation(root)
|
return right_rotation(root)
|
||||||
|
|
||||||
# Right Right
|
# Right Right Case
|
||||||
if balance < -1 and get_balance(root.get_right()) <= 0:
|
if balance < -1 and get_balance(root.get_right()) <= 0:
|
||||||
return left_rotation(root)
|
return left_rotation(root)
|
||||||
|
|
||||||
# Right Left
|
# Right Left Case
|
||||||
if balance < -1 and get_balance(root.get_right()) > 0:
|
if balance < -1 and get_balance(root.get_right()) > 0:
|
||||||
root.set_right(right_rotation(root.get_right()))
|
root.set_right(right_rotation(root.get_right()))
|
||||||
return left_rotation(root)
|
return left_rotation(root)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user