class Solution(object):
    def is_balanced(self, root: TreeNode):
        if not root:
            return True
        return self.traverse(root) != -1

    def traverse(self, node):
        if not node:
            return 0
        left = self.traverse(node.left)
        if left == -1:
            return -1
        right = self.traverse(node.right)
        if right == -1:
            return -1
        if abs(left - right) > 1:
            return -1
        return max(left, right) + 1


if __name__ == "__main__":
    import sys
    sys.path.append("..")
    from playground.TreePlayground import BinaryTreeUtil
    root = BinaryTreeUtil.build_tree([1, 1, 1, 1, 1, None, 1])
    BinaryTreeUtil.pretty_print_tree(root)
    soln = Solution()
    print(soln.is_balanced(root))
Beispiel #2
0
        elif node.left and node.right:
            predecessor = self.pick_predecessor(node)
            if node == parent.left:
                parent.left = predecessor
            else:
                parent.right = predecessor
            predecessor.right = node.right
            if predecessor == node.left:
                predecessor.left = node.left

    def pick_predecessor(self, node):
        parent = node
        node = node.left
        while node.right:
            parent = node
            node = node.right
        if node == parent.left:
            parent.left = None
        else:
            parent.right = None
        print(parent.val, node.val)
        return node

    def get_root(self):
        return self.root


bst = BinarySearchTree([1, 2, 3, 4, 7, 6, 5, 9, 8])
BinaryTreeUtil.pretty_print_tree(bst.get_root())
bst.delete_node(7)
BinaryTreeUtil.pretty_print_tree(bst.get_root())