// Average: O(log(n)) time | O(1) space // Worst: O(n) time | O(1) space public BSTConstruction Insert(int value) { BSTConstruction currentNode = this; while (true) { if (value < currentNode.value) { if (currentNode.left == null) { BSTConstruction newNode = new BSTConstruction(value); currentNode.left = newNode; break; } else { currentNode = currentNode.left; } } else { if (currentNode.right == null) { BSTConstruction newNode = new BSTConstruction(value); currentNode.right = newNode; break; } else { currentNode = currentNode.right; } } } return(this); }
public void Remove(int value, BSTConstruction parentNode) { BSTConstruction currentNode = this; while (currentNode != null) { if (value < currentNode.value) { parentNode = currentNode; currentNode = currentNode.left; } else if (value > currentNode.value) { parentNode = currentNode; currentNode = currentNode.right; } else { if (currentNode.left != null && currentNode.right != null) { currentNode.value = currentNode.right.getMinValue(); currentNode.right.Remove(currentNode.value, currentNode); } else if (parentNode == null) { if (currentNode.left != null) { currentNode.value = currentNode.left.value; currentNode.right = currentNode.left.right; currentNode.left = currentNode.left.left; } else if (currentNode.right != null) { currentNode.value = currentNode.right.value; currentNode.left = currentNode.right.left; currentNode.right = currentNode.right.right; } else { currentNode.value = 0; } } else if (parentNode.left == currentNode) { parentNode.left = currentNode.left != null ? currentNode.left : currentNode.right; } else if (parentNode.right == currentNode) { parentNode.right = currentNode.left != null ? currentNode.left : currentNode.right; } break; } } }
// Average: O(log(n)) time | O(1) space // Worst: O(n) time | O(1) space public bool Contains(int value) { BSTConstruction currentNode = this; while (currentNode != null) { if (value < currentNode.value) { currentNode = currentNode.left; } else if (value > currentNode.value) { currentNode = currentNode.right; } else { return(true); } } return(false); }