Menu
CoddyTech

Kth Smallest Element in a BST

Bạn nhận được một cây tìm kiếm nhị phân dưới dạng mảng root theo thứ tự heap: nút gốc nằm ở chỉ số 0, các nút con của chỉ số i nằm ở 2*i+1 (bên trái) và 2*i+2 (bên phải), còn -1 đánh dấu một vị trí trống. Mảng có thể kết thúc bằng các phần tử -1 thừa. Ở mỗi nút, cây con bên trái chỉ chứa các giá trị nhỏ hơn, còn cây con bên phải chỉ chứa các giá trị lớn hơn.

Trả về giá trị nhỏ thứ k trong cây, với cách đếm bắt đầu từ 1.

Hàm

kthSmallest(root: integer-array, k: integer) → integer
rootinteger-array
Cây tìm kiếm nhị phân theo thứ tự từng mức, với -1 cho vị trí trống
kinteger
vị trí cần tìm theo thứ tự tăng dần, bắt đầu từ 1
Trả vềinteger
giá trị nhỏ thứ k trong cây

Ràng buộc

  • 1 ≤ root.length ≤ 32767
  • Mỗi root[i] là -1 hoặc một giá trị thỏa mãn 0 ≤ root[i] ≤ 105.
  • root[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 bổ sung 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.
  • Quy tắc sắp xếp đúng tại mọi nút, vì vậy không có giá trị nào xuất hiện hai lần.
  • 1 ≤ k ≤ số nút trong cây.

Ví dụ

Đầu vào
root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]k = 4
Đầu ra
29
Giải thích
Theo thứ tự tăng dần, các giá trị là 6, 17, 22, 29, 41, 65, 90, và giá trị thứ tư là 29. Đây là giá trị lớn nhất trong bốn giá trị ở cây con bên trái của nút gốc.
challenge icon

Câu hỏi mở rộng

Nếu cây thay đổi thường xuyên và bạn được hỏi nhiều lần về giá trị nhỏ thứ k, mỗi nút có thể lưu trữ gì để mỗi truy vấn mất O(h)?

Đặt lại code
def kthSmallest(root, k):
    # Viết code tại đây

Kiểm thử #1

Kiểm thử #2

Đối số

root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]
k = 4

Đầu ra mong đợi

29