def _remove_repair(self) -> None:
        is colored in a way which matches these five properties:
        (wording stolen from wikipedia article)
         1. Each node is either red or black.
         2. The root node is black.
         3. All leaves are black.
         4. If a node is red, then both its children are black.
         5. Every path from any node to all of its descendent NIL nodes
            has the same number of black nodes.
        This function runs in O(n) time, because properties 4 and 5 take
        that long to check.
        Red-Black Tree. See check_color_properties for more info.
        leaves of the tree, or None if there isn't one such value (the
        tree is color incorrectly).
        found somewhere in the tree.
        Guaranteed to run in O(log(n)) time.
        it's found, and None otherwise.
        This method is guaranteed to run in O(log(n)) time.
        This method is guaranteed to run in O(log(n)) time.
        This method is guaranteed to run in O(log(n)) time.
        This method is guaranteed to run in O(log(n)) time.
        if self.parent is None:
            return None
        else:
            return self.parent.parent