Menu
CoddyTech

Lowest Common Ancestor of a Binary Tree

Trung bìnhDuyệt câyĐệ quypython iconjava iconcpp iconc iconjs icon+10

Bạn nhận được một cây nhị phân trong mảng root, được sắp xếp theo thứ tự heap: nút gốc ở chỉ số 0, các nút con của chỉ số i ở 2*i+1 (bên trái) và 2*i+2 (bên phải), còn vị trí trống được biểu thị bằng -1. Các giá trị khác nhau và không theo thứ tự nào.

Trả về giá trị của tổ tiên chung thấp nhất của p và q, là giá trị của hai nút khác nhau: nút sâu nhất có cây con chứa cả hai. Cây con bao gồm nút trên cùng, vì vậy nếu q nằm bên dưới p, đáp án là p.

Hàm

lowestCommonAncestor(root: integer-array, p: integer, q: integer) → integer
rootinteger-array
cây nhị phân theo thứ tự từng mức, với -1 cho vị trí trống
pinteger
giá trị của một nút
qinteger
giá trị của một nút khác
Trả vềinteger
giá trị của nút thấp nhất có cây con chứa cả p và q

Ràng buộc

  • 2 ≤ root.length ≤ 32767
  • Mỗi root[i] là -1 hoặc một giá trị thỏa mãn 0 ≤ root[i] ≤ 104.
  • root[0] không bao giờ là -1, và cây có ít nhất hai 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.
  • Tất cả giá trị trong cây đều khác nhau và không theo thứ tự nào.
  • p và q là giá trị của hai nút khác nhau trong cây, theo thứ tự bất kỳ.

Ví dụ

Đầu vào
root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]p = 6q = 9
Đầu ra
3
Giải thích
6 là nút con bên trái của 3, còn 9 nằm bên dưới 4, ở bên phải 3, nên chúng gặp nhau tại 3. Nếu so sánh các giá trị, bạn sẽ hướng đến nút gốc 8: 6 nhỏ hơn và 9 lớn hơn.
challenge icon

Câu hỏi mở rộng

Nếu p hoặc q có thể không xuất hiện, với -1 là đáp án, cách viết tắt nào trong lượt duyệt duy nhất sẽ không còn đúng, và bạn vẫn hoàn thành trong một lượt duyệt như thế nào?

Đặt lại code
def lowestCommonAncestor(root, p, q):
    # Viết code tại đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]
p = 6
q = 9

Đầu ra mong đợi

3