Menu
CoddyTech

Validate Binary Search Tree

Cây nhị phân được lưu trong mảng tree 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), -1 đánh dấu vị trí trống, và mảng có thể kết thúc bằng các phần tử -1 thừa.

Viết isValidBST, hàm này trả về true nếu cây là cây tìm kiếm nhị phân và false nếu không phải. Trong cây tìm kiếm nhị phân, giá trị của mỗi nút phải lớn hơn nghiêm ngặt mọi giá trị trong cây con bên trái và nhỏ hơn nghiêm ngặt mọi giá trị trong cây con bên phải.

Hàm

isValidBST(tree: integer-array) → boolean
treeinteger-array
cây nhị phân theo thứ tự từng tầng, dùng -1 cho vị trí trống
Trả vềboolean
đúng nếu cây là cây tìm kiếm nhị phân, sai nếu không

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.
  • Hai nút con của vị trí trống cũng đều trống, và độ sâu tối đa là 14.
  • Giá trị có thể lặp lại.

Ví dụ

Đầu vào
tree = [8, 3, 12, 1, 6, 10, 15]
Đầu ra
true
Giải thích
Đọc theo thứ tự (cây con trái, nút, cây con phải), ta có các giá trị 1, 3, 6, 8, 10, 12, 15. Chúng tăng nghiêm ngặt, nên mỗi nút nằm đúng phía so với mọi nút tổ tiên.
challenge icon

Câu hỏi mở rộng

Một nút có nút cha ở chỉ số (i-1)/2, làm tròn xuống. Bạn có thể duyệt cây theo thứ tự với bộ nhớ phụ O(1), di chuyển qua các nút cha thay vì dùng ngăn xếp hay đệ quy không?

Đặt lại code
def isValidBST(tree):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

tree = [8, 3, 12, 1, 6, 10, 15]

Đầu ra mong đợi

true