KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (486)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • Git (5)
    • Web (24)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • ETC (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)
    • PS (431)
      • 백준 (187)
      • Programmers (104)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • 수학
  • js
  • LeetCode
  • 다이나믹 프로그래밍
  • Level 1
  • 제코베 JS 100제
  • codeup
  • 그래프
  • Level1
  • 문자열
  • programmers
  • tree
  • Level 0
  • C++
  • 백준
  • C
  • Level 2
  • recursion
  • 정렬
  • string

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun

Coding Note

PS/LeetCode

LeetCode / Binary Search Tree / 98번 / Validate Binary Search Tree / JS

2023. 4. 5. 16:21

< 문제 바로가기 >

 

Validate Binary Search Tree - LeetCode

Can you solve this real interview question? 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 le

leetcode.com

 

< 문제 간단설명 >

주어진 Tree가 유효한 BST(Binary Search Tree)인지 확인해서 boolean 값을 반환하는 문제이다.

BST가 되기 위한 조건은 다음과 같다.

  • 왼쪽 하위트리는 모두 부모노드의 값보다 작아야 한다.
  • 오른쪽 하위트리는 모두 부모노드의 값보다 커야 한다.
  • 왼쪽, 오른쪽 하위트리 모두 또한 BST를 이루어야 한다.(위의 2개의 조건들이 모두 맞아야 한다)

 

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isValidBST = function(root) {
    const validate = (min, root, max) => {
        if(!root) return true;

        if(root.val <= min || root.val >= max) return false;

        let leftValidation = validate(min, root.left, root.val);
        let rightValidation = validate(root.val, root.right, max);

        return leftValidation && rightValidation;
    }

    return validate(-Infinity, root, Infinity);
};

처음에 최소값을 -Infinity, 최대값을 Infinity로 설정을 해준다.

그리고 나서 재귀를 돌게 되는데, 재귀의 인자는 (최소값, root, 최대값)이다.

 

왼쪽 서브트리는 왼쪽 서브트리의 root가 현재 root의 값보다 작아야한다. 따라서 인자로 (최소값, root.left, root.val)을 계속 넘겨주면서 재귀를 수행하게 된다.

오른쪽 서브트리는 오른쪽 서브트리의 root가 현재 root의 값보다 커야한다. 따라서 인자로 (root.val, root.right, 최대값)을 계속 넘겨주면서 재귀를 수행하게 된다.

 

계속 재귀를 진행하면서 root가 null이라면, 즉 Tree의 끝까지 다다랐다면 종료조건에 걸리지 않았다는 것이므로 true를 반환하게 된다.

 

false를 반환하는 조건은 현재 root의 값이 최소값보다 작거나 최대값보다 크게되면 BST를 만족하지 않으므로 false를 반환하게 된다.

저작자표시

'PS > LeetCode' 카테고리의 다른 글

LeetCode / Stack / 844번 / Backspace String Compare / JS  (0) 2023.04.18
LeetCode / Binary Search Tree / 235번 / Lowest Common Ancestor of a Binary Search Tree / JS  (0) 2023.04.05
LeetCode / Binary Search / 278번 / First Bad Version / JS  (0) 2023.04.05
LeetCode / Binary Search / 704번 / Binary Search / JS  (0) 2023.04.05
    'PS/LeetCode' 카테고리의 다른 글
    • LeetCode / Stack / 844번 / Backspace String Compare / JS
    • LeetCode / Binary Search Tree / 235번 / Lowest Common Ancestor of a Binary Search Tree / JS
    • LeetCode / Binary Search / 278번 / First Bad Version / JS
    • LeetCode / Binary Search / 704번 / Binary Search / JS
    KimMinJun
    KimMinJun

    티스토리툴바