def _insert(self, key, val, currentNode: TreeNode): if key < currentNode.key: if currentNode.hasLeftChild(): self._insert(key, val, currentNode.leftChild) else: currentNode.leftChild = TreeNode(key, val, parent=currentNode) self.__checkAfterInsert__(currentNode.leftChild) else: if currentNode.hasRightChild(): self._insert(key, val, currentNode.rightChild) else: currentNode.rightChild = TreeNode(key, val, parent=currentNode) self.__checkAfterInsert__(currentNode.rightChild)
def __removeWithSingleChildren__(self, node: TreeNode): successor = node.leftChild if node.hasLeftChild() else node.rightChild if node.isLeftChild(): node.parent.leftChild = successor else: node.parent.rightChild = successor if node.isRed(): return None if successor.isRed(): successor.setBlackColor() else: self.__balanceAfterRemove__(successor)