Menu
CoddyTech

Subtree of Another Tree

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

Trả về true nếu có một nút nào đó trong root mà toàn bộ các nút hậu duệ của nó có hình dạng và giá trị khớp chính xác với subRoot, nếu không thì trả về false. Toàn bộ cây root cũng được tính.

Hàm

isSubtree(root: integer-array, subRoot: integer-array) → boolean
rootinteger-array
cây cần tìm kiếm, theo thứ tự từng mức, dùng -1 cho vị trí trống
subRootinteger-array
cây cần tìm, theo cùng định dạng
Trả vềboolean
true nếu subRoot xuất hiện trong root dưới dạng một nút có đầy đủ các nút con, nếu không thì false

Ràng buộc

  • 1 ≤ root.length ≤ 32767 và 1 ≤ subRoot.length ≤ 32767
  • Mỗi mục là -1 hoặc một giá trị từ 0 đến 104.
  • root[0] và subRoot[0] không bao giờ là -1, vì vậy cả hai cây đều có ít nhất một nút.
  • Mỗi mảng có thể kết thúc bằng các mục -1 thừa, nằm 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à mỗi cây có độ sâu tối đa là 14.
  • Giá trị có thể lặp lại.

Ví dụ

Đầu vào
root = [6, 2, 8, 1, 3, -1, 9]subRoot = [2, 1, 3]
Đầu ra
true
Giải thích
Nút 2 ở chỉ số 1 có các nút con là 1 và 3, cả hai đều là nút lá. Đó chính xác là subRoot.
challenge icon

Câu hỏi mở rộng

Bạn có thể tạo dấu vân tay cho mọi cây con từ giá trị của nó và dấu vân tay của các cây con của nó, để việc so sánh với subRoot chỉ tốn O(1) không? Bạn xử lý thế nào khi hai cây con khác nhau bị trùng dấu vân tay?

Đặt lại code
def isSubtree(root, subRoot):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

root = [6, 2, 8, 1, 3, -1, 9]
subRoot = [2, 1, 3]

Đầu ra mong đợi

true