IT/Computer Science
[Leetcode/Tree] 501. Find Mode in Binary Search Tree
Diana Kang
2025. 3. 14. 23:07
- mode: μ΅λΉκ°
πΉ Binary Search Tree(μ΄μ§ νμ νΈλ¦¬, BST)λ?
- μ΄μ§ νΈλ¦¬μ ν μ’
λ₯μ΄λ©°, λ
Έλμ λ°°μΉμ νΉμ ν κ·μΉμ΄ μ μ©λλ€:
- μΌμͺ½ μλΈνΈλ¦¬μ λͺ¨λ κ°μ νμ¬ λ Έλλ³΄λ€ μμμΌ νλ€.
- μ€λ₯Έμͺ½ μλΈνΈλ¦¬μ λͺ¨λ κ°μ νμ¬ λ Έλλ³΄λ€ μ»€μΌ νλ€.
- μ΄ κ·μΉ λλΆμ νμ(κ²μ), μ½μ , μμ λ±μ μ°μ°μ΄ ν¨μ¨μ (νκ· O(log n))μΌλ‘ μνλλ€.
πΉ μ€μ μν(In-order Traversal)λ?
μ΄μ§ νμ νΈλ¦¬(BST)μμ μ€μ μν(In-order Traversal) λ₯Ό μννλ©΄ κ°μ΄ μ€λ¦μ°¨μ(ascending order)μΌλ‘ μ λ ¬λ μμλ‘ λ°©λ¬Έλλ€.
π μ€μ μν μμ
- μΌμͺ½ μλΈνΈλ¦¬ νμ
- νμ¬ λ Έλ λ°©λ¬Έ
- μ€λ₯Έμͺ½ μλΈνΈλ¦¬ νμ
πΉ μμ νΈλ¦¬
μλμ κ°μ BSTκ° μλ€κ³ κ°μ ν΄λ³΄μ.
4
/ \
2 6
/ \ \
1 3 7
μ€μ μν(In-order Traversal) μ€ν κ²°κ³Ό:
1 → 2 → 3 → 4 → 6 → 7 (μ€λ¦μ°¨μ)
μ¦, BSTλ In-order Traversalμ νλ©΄ μ λ ¬λ μνλ‘ κ°μ΄ λμ€λ―λ‘, μ΄μ κ°κ³Ό νμ¬ κ°μ λΉκ΅νλ©΄μ μ΅λΉκ°μ μ°Ύμ μ μμ!
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def findMode(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return []
self.current_val = None
self.current_count = 0
self.max_count = 0
self.modes = []
def inorder_traversal(node):
if node is None:
return
# 1. μΌμͺ½ μλΈνΈλ¦¬ νμ
inorder_traversal(node.left)
# 2.1. νμ¬ λ
Έλ λ°©λ¬Έ
if node.val == self.current_val:
self.current_count += 1
else:
self.current_val = node.val
self.current_count = 1
# 2.2. mode(s) κ°±μ
if self.current_count > self.max_count:
self.max_count = self.current_count
self.modes = [node.val]
elif self.current_count == self.max_count:
self.modes.append(node.val)
# 3. μ€λ₯Έμͺ½ μλΈνΈλ¦¬ νμ
inorder_traversal(node.right)
# 4. μ€μ μν μμ
inorder_traversal(root)
return self.modes