job 인터뷰/코테(Matroid) 준비

230. Kth Smallest Element in a BST

hyunkookim 2025. 3. 31. 07:27

230. Kth Smallest Element in a BST

 

# 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 kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
        # 왼->현->오른쪽..으로 리스트업하면. 즉 inorder 순회 전체 나오고 거기에서.. k번째 찾으면 됨

        res = []
        def dfs(node):
            if not node: # 노드 없으면 
                return # 그냥 끝내고

            if node.left:
                dfs(node.left)
            res.append(node.val)
            if node.right:
                dfs(node.right)

        dfs(root)

        return res[k-1] # 0이 1번째 이므로, k번째는 index가 k-1 임

 

최종 코드

# 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 kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
        # k번째 작은거니, inorder로 모두 res 에 추가하면
        # 작은순서대로..
        # k번째 작은것: res[k-1] 리턴
        if not root:
            return 0

        res = []
        def dfs(node):
            if node.left:
                dfs(node.left)
            res.append(node.val)
            if node.right:
                dfs(node.right)
        dfs(root)
        #print(res)
        return res[k-1]

 


# 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 kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
        # k 번째 작은거 찾기 -> inorder 순서로 배열에 넣어서, 
        # k번째 작은거니, k-1 번째 반환. 왜? 1번째 작은게. index 0 이니..
        # inorder: 왼, 나, 오
        res = []

        def dfs(node):
            if not node:
                return
            
            dfs(node.left)
            res.append(node.val)
            dfs(node.right)

        dfs(root)

        return res[k-1]