Рубрики
Без рубрики

Почтовый индекс 98. Проверка Двоичного Дерева Поиска

Решение + объяснение проблемы 98. Помеченный java, дерево.

public class Solution {
    public boolean isValidBST(TreeNode root) {
        return isValid(root, null, null);
    }

    private boolean isValid(TreeNode p, Integer low, Integer high) {
        if (p == null) {
            return true;
        }

        return (low == null || p.val > low) && (high == null || p.val < high) && isValid(p.left, low, p.val) && isValid(p.right, p.val, high);
    }
}

В BST левый дочерний узел меньше своего родительского, а правый дочерний узел всегда больше своего родительского. Решение основано на этом свойстве. В функции isValid мы рекурсивно проверяем, имеет ли узел значение между low и высокий . Существует крайний случай, когда узел может иметь значение, равное Integer. МИНИМАЛЬНОЕ ЗНАЧЕНИЕ или Целое число. МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ . Поэтому мы используем null для представления бесконечности.

Временная сложность : O(n)

Временная сложность : O(n)

public class Solution {
    private TreeNode prev;

    public boolean isValidBST(TreeNode root) {
        prev = null;
        return isMonotonicIncreasing(root);
    }

    private boolean isMonotonicIncreasing(TreeNode p) {
        if (p == null) {
            return true;
        }

        if (isMonotonicIncreasing(p.left)) {
            if (prev != null && p.val <= prev.val) {
                return false;
            }
            prev = p;
            return isMonotonicIncreasing(p.right);
        }

        return false;
    }
}

Если дерево является допустимым, НО, его элементы должны строго следовать возрастающему порядку в рамках обхода по порядку. Мы можем использовать это свойство для решения проблемы. Чтобы узнать больше о обходе по порядку, пожалуйста, ознакомьтесь с этой ссылкой . Мы определяем prev , чтобы отслеживать предыдущий элемент при обходе по порядку. Всякий раз, когда мы обнаруживаем, что существует древовидный узел p , который меньше, чем предыдущий , мы знаем, что дерево не является допустимым BST.

Временная сложность : O(n)

Дополнительное пространство : O(1)

Оригинал: “https://dev.to/algobot76/leetcode-98-validate-binary-search-tree-4o29”