class Node:
def __init__(self, key):
self.left = None
self.right = None
self.data = key
def insert(root, key):
if root is None:
root = Node(key)
elif root.data > key:
root.left = insert(root.left, key)
elif root.data < key:
root.right = insert(root.right, key)
return root
def inorder(root):
if root != None:
inorder(root.left)
print(root.data, end = " ")
inorder(root.right)
def mostlyRight(root):
if root.left != None:
root = root.left
return root
def delete(root, key):
if root is None:
return root
elif root.data < key:
root.right = delete(root.right, key)
elif root.data > key:
root.left = delete(root.left, key)
else:
if root.left is None and root.right is None:
root = None
elif root.left == None:
temp = root.right
root = None
return temp
elif root.right == None:
temp = root.left
root = None
return temp
elif root.left is not None and root.right is not None:
temp = mostlyRight(root.right)
root.data = temp.data
root.right = delete(root.right, temp.data)
return root
def search(root, key):
pass
def main():
root = Node(10)
insert(root, 4)
insert(root, 7)
insert(root, 3)
insert(root, -3)
insert(root, 13)
insert(root, 5)
inorder(root)
print()
key = 13
print("Delete %d" % key)
delete(root, key)
inorder(root)
main()
Y2xhc3MgTm9kZToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrZXkpOgogICAgICAgIHNlbGYubGVmdCA9IE5vbmUKICAgICAgICBzZWxmLnJpZ2h0ID0gTm9uZQogICAgICAgIHNlbGYuZGF0YSA9IGtleQoKCmRlZiBpbnNlcnQocm9vdCwga2V5KToKCiAgICAgICBpZiByb290IGlzIE5vbmU6CiAgICAgICAgICAgcm9vdCA9IE5vZGUoa2V5KQoKICAgICAgIGVsaWYgcm9vdC5kYXRhID4ga2V5OgogICAgICAgICAgICByb290LmxlZnQgPSBpbnNlcnQocm9vdC5sZWZ0LCBrZXkpCgogICAgICAgZWxpZiByb290LmRhdGEgPCBrZXk6CiAgICAgICAgICAgIHJvb3QucmlnaHQgPSBpbnNlcnQocm9vdC5yaWdodCwga2V5KQoKICAgICAgIHJldHVybiByb290CgpkZWYgaW5vcmRlcihyb290KToKICAgIGlmIHJvb3QgIT0gTm9uZToKICAgICAgICBpbm9yZGVyKHJvb3QubGVmdCkKICAgICAgICBwcmludChyb290LmRhdGEsIGVuZCA9ICIgIikKICAgICAgICBpbm9yZGVyKHJvb3QucmlnaHQpCgpkZWYgbW9zdGx5UmlnaHQocm9vdCk6CgogICAgaWYgcm9vdC5sZWZ0ICE9IE5vbmU6CiAgICAgICByb290ID0gcm9vdC5sZWZ0CgogICAgcmV0dXJuIHJvb3QKCmRlZiBkZWxldGUocm9vdCwga2V5KToKCiAgICBpZiByb290IGlzIE5vbmU6CiAgICAgICByZXR1cm4gcm9vdAogICAgZWxpZiByb290LmRhdGEgPCBrZXk6CiAgICAgICAgIHJvb3QucmlnaHQgPSBkZWxldGUocm9vdC5yaWdodCwga2V5KQogICAgZWxpZiByb290LmRhdGEgPiBrZXk6CiAgICAgICAgIHJvb3QubGVmdCA9IGRlbGV0ZShyb290LmxlZnQsIGtleSkKICAgIGVsc2U6CiAgICAgICAgaWYgcm9vdC5sZWZ0IGlzIE5vbmUgYW5kIHJvb3QucmlnaHQgaXMgTm9uZToKICAgICAgICAgICAgcm9vdCA9IE5vbmUKICAgICAgICBlbGlmIHJvb3QubGVmdCA9PSBOb25lOgogICAgICAgICAgICAgdGVtcCA9IHJvb3QucmlnaHQKICAgICAgICAgICAgIHJvb3QgPSBOb25lCiAgICAgICAgICAgICByZXR1cm4gdGVtcAoKICAgICAgICBlbGlmIHJvb3QucmlnaHQgPT0gTm9uZToKICAgICAgICAgICAgIHRlbXAgPSByb290LmxlZnQKICAgICAgICAgICAgIHJvb3QgPSBOb25lCiAgICAgICAgICAgICByZXR1cm4gdGVtcAogICAgICAgIGVsaWYgcm9vdC5sZWZ0IGlzIG5vdCBOb25lIGFuZCByb290LnJpZ2h0IGlzIG5vdCBOb25lOgogICAgICAgICAgICB0ZW1wID0gbW9zdGx5UmlnaHQocm9vdC5yaWdodCkKICAgICAgICAgICAgcm9vdC5kYXRhID0gdGVtcC5kYXRhCiAgICAgICAgICAgIHJvb3QucmlnaHQgPSBkZWxldGUocm9vdC5yaWdodCwgdGVtcC5kYXRhKQoKCiAgICByZXR1cm4gcm9vdAoKCmRlZiBzZWFyY2gocm9vdCwga2V5KToKCiAgICBwYXNzCgoKZGVmIG1haW4oKToKICAgIHJvb3QgPSBOb2RlKDEwKQogICAgaW5zZXJ0KHJvb3QsIDQpCiAgICBpbnNlcnQocm9vdCwgNykKICAgIGluc2VydChyb290LCAzKQogICAgaW5zZXJ0KHJvb3QsIC0zKQogICAgaW5zZXJ0KHJvb3QsIDEzKQogICAgaW5zZXJ0KHJvb3QsIDUpCiAgICBpbm9yZGVyKHJvb3QpCgogICAgcHJpbnQoKQoKICAgIGtleSA9IDEzCiAgICBwcmludCgiRGVsZXRlICVkIiAlIGtleSkKICAgIGRlbGV0ZShyb290LCBrZXkpCgogICAgaW5vcmRlcihyb290KQptYWluKCkK