Menu
CoddyTech

Vertical Order Traversal of a Binary Tree

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

Nút gốc nằm ở cột 0; nút con bên trái nằm ở cột ngay bên trái nút cha, nút con bên phải nằm ở cột ngay bên phải. Trả về một danh sách cho mỗi cột, từ trái sang phải. Trong mỗi cột, liệt kê các nút từ trên xuống dưới, và sắp xếp các nút cùng cột và cùng độ sâu theo thứ tự giá trị tăng dần.

Hàm

verticalTraversal(root: integer-array) → integer-2d-array
rootinteger-array
cây theo thứ tự heap, với -1 cho vị trí trống
Trả vềinteger-2d-array
mỗi cột là một danh sách giá trị, theo thứ tự từ trái sang phải, lần lượt từ trên xuống dưới

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] ≤ 5000, và không có giá trị nào xuất hiện hai lần.
  • 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 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à cây có tối đa 14 tầng.

Ví dụ

Đầu vào
root = [5, 2, 9, 4, 7, 1, 6]
Đầu ra
[[4], [2], [5, 1, 7], [9], [6]]
Giải thích
Cột 0 chứa nút gốc 5, sau đó là 7 và 1 ở thấp hơn hai cấp. Hai nút này có cùng cột và độ sâu, vì vậy 1 đứng trước 7, dù 7 nằm xa hơn về bên trái.
challenge icon

Câu hỏi mở rộng

Mỗi giá trị đều không vượt quá 5000. Bạn có thể tận dụng điều đó để bỏ phép sắp xếp so sánh và hoàn thành trong thời gian O(n + 5000) không?

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

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

root = [5, 2, 9, 4, 7, 1, 6]

Đầu ra mong đợi

[[4], [2], [5, 1, 7], [9], [6]]