[Leetcode] 98. Validate Binary Search Tree

Sungwooยท2024๋…„ 11์›” 18์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
13/43
post-thumbnail

๐Ÿ“•๋ฌธ์ œ

[Leetcode] 98. Validate Binary Search Tree

๋ฌธ์ œ ์„ค๋ช…

์ฃผ์–ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ(BST)์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

BST๊ฐ€ ๋˜๊ธฐ์œ„ํ•œ ์กฐ๊ฑด

  • ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๊ฐ’์€ ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’๋ณด๋‹ค ์ž‘์•„์•ผ ํ•œ๋‹ค.
  • ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๊ฐ’์€ ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’๋ณด๋‹ค ์ปค์•ผ ํ•œ๋‹ค.
  • ๋ชจ๋“  ์„œ๋ธŒํŠธ๋ฆฌ๋„ ์œ„ ๋‘ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” BST์—ฌ์•ผ ํ•œ๋‹ค.

๐Ÿ“ํ’€์ด

BST๋ฅผ ์ค‘์œ„์ˆœํšŒํ•˜๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ์ด๋ผ๋Š” ์ ์„ ์ด์šฉํ•˜์˜€๋‹ค.

class Solution:
    def isValidBST(self, root: Optional[TreeNode]) -> bool:
        stack = []
        curr = root
        prev = None
        while curr or stack:
            while curr:
                stack.append(curr)
                curr = curr.left
            curr = stack.pop()
            if prev and curr.val > prev.val:
                return False
            prev = curr
            curr = curr.right
        return True
  • ํƒ์ƒ‰์— ํ•„์š”ํ•œ ์Šคํƒ๊ณผ ํƒ์ƒ‰ ์ค‘ ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜ curr, ์ง์ „์— ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜ prev๋ฅผ ์„ค์ •ํ•œ๋‹ค.
  1. ํŠธ๋ฆฌ์˜ ์™ผ์ชฝ ๋๊นŒ์ง€ ๋‚ด๋ ค๊ฐ€๋ฉฐ ์Šคํƒ์— ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  2. ์Šคํƒ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด curr๊ฐ’์„ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.
  3. ํ˜„์žฌ๊ฐ’์ด ์ด์ „๊ฐ’๋ณด๋‹ค ํฌ๋ฉด False๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  4. prev๊ฐ’๊ณผ curr๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
  • ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ํƒ์ƒ‰์ด ๋๋‚˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ True๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€