From 1f54446eda075d4cea47b9fde9bf2d8a86710850 Mon Sep 17 00:00:00 2001 From: Manish Date: Tue, 5 Sep 2023 14:58:14 +1000 Subject: [PATCH] Data Structures: Delete a Node with Two Children in a Binary Search Tree --- Data Structures/bstDeleteTwoChildrenNode.js | 48 +++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Data Structures/bstDeleteTwoChildrenNode.js diff --git a/Data Structures/bstDeleteTwoChildrenNode.js b/Data Structures/bstDeleteTwoChildrenNode.js new file mode 100644 index 0000000..cc2fa7d --- /dev/null +++ b/Data Structures/bstDeleteTwoChildrenNode.js @@ -0,0 +1,48 @@ +// https://www.freecodecamp.org/learn/coding-interview-prep/data-structures/delete-a-node-with-one-child-in-a-binary-search-tree + +var displayTree = (tree) => console.log(JSON.stringify(tree, null, 2)); +function Node(value) { + this.value = value; + this.left = null; + this.right = null; +} + +function BinarySearchTree() { + this.root = null; + // Only change code below this line + this.remove = (value) => { + let parent = null; + let node = this.root; + while (node !== null && node.value !== value) { + parent = node; + if (node.value < value) { + node = node.right; + } else { + node = node.left; + } + } + if (node === null) return null; + let child = null; + if (node.left !== null && node.right === null) child = node.left; + else if (node.left === null && node.right !== null) child = node.right; + else if (node.left !== null && node.right !== null) { + let smallestRightNodeParent = node; + let smallestRightNode = node.right; + while (smallestRightNode.left !== null) { + smallestRightNodeParent = smallestRightNode; + smallestRightNode = smallestRightNode.left; + } + node.value = smallestRightNode.value; + if (smallestRightNodeParent !== node) + smallestRightNodeParent.left = smallestRightNode.right; + else node.right = null; + return; + } + if (parent === null) this.root = child; + else if (parent.value < value) { + parent.right = child; + } else { + parent.left = child; + } + }; +}