コード例 #1
0
 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)
コード例 #2
0
    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)