19 lines
1.1 KiB
Markdown
19 lines
1.1 KiB
Markdown
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 - высота дерева
|
|
## Код
|
|
```Java
|
|
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);
|
|
}
|
|
}
|
|
``` |