Skip to content

Commit

Permalink
feature: range sum of bst
Browse files Browse the repository at this point in the history
  • Loading branch information
solairerove committed Jan 8, 2024
1 parent d15f22f commit 1deb3f2
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 0 deletions.
18 changes: 18 additions & 0 deletions trees/RangeSumOfBST.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from typing import Optional

from trees.TreeNode import TreeNode


# O(n) time || O(h) space
# n - number of all nodes
# h - height of tree
def range_sum_bst(self, root: Optional[TreeNode], low: int, high: int) -> int:
if not root:
return 0

if root.val < low:
return range_sum_bst(self, root.right, low, high)
elif root.val > high:
return range_sum_bst(self, root.left, low, high)

return root.val + range_sum_bst(self, root.left, low, high) + range_sum_bst(self, root.right, low, high)
43 changes: 43 additions & 0 deletions trees/test/test_range_sum_bst.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import unittest

from trees.RangeSumOfBST import range_sum_bst
from trees.TreeNode import TreeNode


class MyTestCase(unittest.TestCase):
def test_range_sum_bst(self):
root = TreeNode(
val=10,
left=TreeNode(
val=5,
left=TreeNode(val=3),
right=TreeNode(val=7)
),
right=TreeNode(
val=15,
right=TreeNode(18)
)
)

self.assertEqual(32, range_sum_bst(self, root, 7, 15))

def test_range_sum_bst_1(self):
root = TreeNode(
val=10,
left=TreeNode(
val=5,
left=TreeNode(val=3, left=TreeNode(1)),
right=TreeNode(val=7, left=TreeNode(6))
),
right=TreeNode(
val=15,
left=TreeNode(13),
right=TreeNode(18)
)
)

self.assertEqual(23, range_sum_bst(self, root, 6, 10))


if __name__ == '__main__':
unittest.main()

0 comments on commit 1deb3f2

Please sign in to comment.