def insert_node(root, key):
# Create a new node
new_node = Node(key)
# Insert the new node as a normal BST
root = bst_insert(root, new_node)
# Fix the Red-Black Tree properties
fix_violation(root, new_node)
# Return the root of the modified tree
return root
def delete_node(root, key):
# Find the node to delete
node = bst_delete(root, key)
# Fix the Red-Black Tree properties
fix_violation(root, node.parent)
# Return the root of the modified tree
return root
def in_order_traversal(node):
if node:
in_order_traversal(node.left)
print(node.key)
in_order_traversal(node.right)