Условие задачи

Дан корень бинарного дерева, необходимо определить, является ли оно валидным бинарным деревом поиска (BST).

Валидное BST определяется следующим образом:

Примеры

Решение

Для решения этой задачи мы будем использовать рекурсивный алгоритм, который будет проверять каждый узел дерева на соответствие требованиям BST. Мы будем передавать в функцию максимальный и минимальный допустимые значения узла. Изначально мы передадим функции float('-inf') и float('inf') для максимального и минимального значений соответственно. Если мы достигнем листового узла, то вернем True, а иначе будем рекурсивно проверять значения левого и правого поддерева.

Код

class Solution:
    def isValidBST(self, root, min_val=float('-inf'), max_val=float('inf')):
        if not root:
            return True
        if root.val <= min_val or root.val >= max_val:
            return False
        return self.isValidBST(root.left, min_val, root.val) and self.isValidBST(root.right, root.val, max_val)