Menu
CoddyTech

Range Sum of BST

Cây tìm kiếm nhị phân được lưu trong mảng tree theo thứ tự từng mức: nút gốc nằm ở chỉ số 0, các nút con của nút ở chỉ số i nằm tại 2*i+1 (bên trái) và 2*i+2 (bên phải), còn -1 đánh dấu vị trí trống. Trong cây tìm kiếm nhị phân, mọi giá trị trong cây con bên trái của một nút đều nhỏ hơn giá trị của nút đó, còn mọi giá trị trong cây con bên phải đều lớn hơn.

Trả về tổng giá trị của tất cả các nút v thỏa mãn low ≤ v ≤ high, hoặc 0 nếu không có nút nào như vậy.

Hàm

rangeSumBST(tree: integer-array, low: integer, high: integer) → integer
treeinteger-array
cây tìm kiếm nhị phân theo thứ tự từng mức, dùng -1 cho vị trí trống
lowinteger
giá trị nhỏ nhất cần đếm
highinteger
giá trị lớn nhất cần đếm
Trả vềinteger
tổng các giá trị nút từ low đến high, bao gồm cả hai

Ràng buộc

  • 1 ≤ tree.length ≤ 32767
  • Mỗi tree[i] là -1 hoặc một giá trị thỏa mãn 0 ≤ tree[i] ≤ 105.
  • tree[0] không bao giờ là -1, vì vậy cây có ít nhất một nút.
  • Mảng có thể kết thúc bằng các phần tử -1 thừa sau nút cuối cùng.
  • Cả hai nút con của một vị trí trống cũng đều trống, và độ sâu tối đa là 14.
  • Cây tìm kiếm nhị phân (binary search tree) này hợp lệ, vì vậy mọi giá trị trong cây đều khác nhau.
  • 0 ≤ low ≤ high ≤ 105
  • Câu trả lời nằm trong phạm vi số nguyên có dấu 32 bit.

Ví dụ

Đầu vào
tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]low = 9high = 31
Đầu ra
88
Giải thích
Các giá trị từ 9 đến 31 là 10, 12, 15, 20 và 31, cộng lại bằng 88. Các giá trị 3, 8 và 40 nằm ngoài phạm vi.
challenge icon

Câu hỏi mở rộng

Nếu phải trả lời hàng nghìn truy vấn (query) (low, high) khác nhau trên cùng một cây, bạn có thể trả lời mỗi truy vấn trong thời gian O(log n) như thế nào?

Đặt lại code
def rangeSumBST(tree, low, high):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]
low = 9
high = 31

Đầu ra mong đợi

88