LeetCode 938. Range Sum of BST

개발공부를해보자·2025년 2월 15일

LeetCode

목록 보기
52/95

파이썬 알고리즘 인터뷰 52번(리트코드 938번) Range Sum of BST
https://leetcode.com/problems/range-sum-of-bst/

나의 풀이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 rangeSumBST(self, root: Optional[TreeNode], low: int, high: int) -> int:
        cnt = 0
        def helper(root):
            nonlocal cnt
            if not root:
                return
            if low <= root.val <= high:
                cnt += root.val
            if root.val > high:
                helper(root.left)
                return
            if root.val < low:
                helper(root.right)
                return
            helper(root.left)
            helper(root.right)
            return
        helper(root)
        return cnt
            

나의 풀이2

# 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 rangeSumBST(self, root: Optional[TreeNode], low: int, high: int) -> int:
        def helper(root, cnt):
            if not root:
                return 0
            if low <= root.val <= high:
                return cnt + root.val + helper(root.left, cnt) + helper(root.right, cnt)
            if root.val > high:
                return cnt + helper(root.left, cnt)
            if root.val < low:
                return cnt + helper(root.right, cnt)
            
        return helper(root, 0)

나의 풀이3

# 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 rangeSumBST(self, root: Optional[TreeNode], low: int, high: int) -> int:
        def helper(root):
            if not root:
                return 0
            if low <= root.val <= high:
                return root.val + helper(root.left) + helper(root.right)
            if root.val > high:
                return helper(root.left)
            if root.val < low:
                return helper(root.right)
            
        return helper(root)
  • 현재 누적 합을 다루는 방법을 조금씩 개선하였고 3번 풀이가 가장 마음에 든다.

다른 풀이(DFS, Stack)

# 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 rangeSumBST(self, root: Optional[TreeNode], low: int, high: int) -> int:
        stack = [root]
        curr = 0
        while stack:
            node = stack.pop()
            if node:
                if low <= node.val <= high:
                    curr += node.val
                if node.val > low:
                    stack.append(node.left)
                if node.val < high:
                    stack.append(node.right)
        return curr

               
  • stack 대신 queue를 사용하여 BFS로도 풀 수 있다.
profile
개발 공부하는 30대 비전공자 직장인

0개의 댓글