From 0c05504ae14eae7725752006279655905e8945fd Mon Sep 17 00:00:00 2001 From: marina <138340846+bt3gl-cryptographer@users.noreply.github.com> Date: Thu, 3 Aug 2023 14:23:13 -0700 Subject: [PATCH] Create bst_delete_node.py --- trees/bst_delete_node.py | 46 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 trees/bst_delete_node.py diff --git a/trees/bst_delete_node.py b/trees/bst_delete_node.py new file mode 100644 index 0000000..a0f710a --- /dev/null +++ b/trees/bst_delete_node.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# author: bt3gl + + +def successor(root): + + root = root.right + while root.left: + root = root.left + return root.val + + +def predecessor(root): + + root = root.left + while root.right: + root = root.right + return root.val + + +def delete_node(root, key): + + if not root: + return root + + if key > root.val: + root.right = deleteNode(root.right, key) + + elif key < root.val: + root.left = deleteNode(root.left, key) + + else: + if not (root.left or root.right): + root = None + + elif root.right: + root.val = successor(root) + root.right = deleteNode(root.right, root.val) + + else: + root.val = predecessor(root) + root.left = deleteNode(root.left, root.val) + + return root +