N

(Leet Code JS)Validate Binary Search 본문

Leet Code 알고리즘

(Leet Code JS)Validate Binary Search

naeunchan 2021. 9. 6. 11:08
728x90
반응형

98. Validate Binary Search Tree

 

Given the root of a binary tree, determine if it is a valid binary search tree (BST).

A valid BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node's key.
  • The right subtree of a node contains only nodes with keys greater than the node's key.
  • Both the left and right subtrees must also be binary search trees.

 

Example 1:

Input: root = [2,1,3] Output: true

Example 2:

Input: root = [5,1,4,null,null,3,6] Output: false Explanation: The root node's value is 5 but its right child's value is 4.

 

Constraints:

  • The number of nodes in the tree is in the range [1, 104].
  • -231 <= Node.val <= 231 - 1

 

이진 탐색 트리로 이뤄진 트리가 유효 이진 탐색 트리인지 확인하는 문제.

 

유효 이진 탐색 트리(Validate Binary Search Tree, VBST)란?

 

루트의 왼쪽 노드는 무조건 루트 값보다 작으며, 왼쪽 노드의 서브 트리 또한 조건이 존재한다.

왼쪽 노드의 서브 트리 중 왼쪽 노드는 루트보다 값이 작으면서 부모 노드보다 값이 작아야 한다.

왼쪽 노드의 서브 트리 중 오른쪽 노드는 루트보다 값이 작으면서 부모 노드보다 값이 커야 한다.

 

루트의 오른쪽 노드는 무조건 루트 값보다 크며, 오른쪽 노드의 서브 트리 또한 조건이 존재한다.

오른쪽 노드의 서브 트리 중 왼쪽 노드는 루트보다 값이 크면서 부모 노드보다 값이 작아야 한다.

오른쪽 노드의 서브 트리 중 오른쪽 노드는 루트보다 값이 크면서 부모 노드보다 값이 커야 한다.

 

이 조건을 DFS로 풀 수 있다.

const dfs = (node, left, right) => {
    if(!node){
        return true;
    }
    
    return node.val > left && node.val < right && dfs(node.left, left, node.val) && dfs(node.right, node.val, right);
}

const isValidBST = function(root) {
    return dfs(root, -Infinity, Infinity);
};
728x90
반응형

'Leet Code 알고리즘' 카테고리의 다른 글

(Leet Code c++)Is Subsequence  (0) 2021.09.08
(Leet Code JS)Island Perimeter  (0) 2021.09.06
(Leet Code JS)Find the Difference  (0) 2021.09.04
(Leet Code JS)Merge Intervals  (0) 2021.08.26
(Leet Code c++)Merge Intervals  (0) 2021.08.26