x

Validate Binary Search Tree

Leetcode #98 | Medium | Деревья | DFS | BST

Идея

DFS с границами low и high. Если нода null - true, если значение ноды вне low...high - false. При спуске влево родитель задает ограничение сверху (high), при спуске вправо - ограничение снизу (low) - свойства бинарного дерева.
Важно: изначально high и low нужно ставить в Long.MAX_VALUE/Long.MIN_VALUE (по требованиям задачи, Integer слишком маленький)

Big-O

  • Время O(N)
  • Память O(H)

N - количество узлов, H - высота дерева

Код

class Solution {
    public boolean isValidBST(TreeNode root) { return dfs(root, Long.MIN_VALUE, Long.MAX_VALUE); }
    private boolean dfs(TreeNode node, long low, long high) {
        if (node == null) return true;
        if (node.val <= low || node.val >= high) return false;
        return dfs(node.left, low, node.val) && dfs(node.right, node.val, high);
    }
}
Left-click: follow link, Right-click: select node, Scroll: zoom
x