Menu
CoddyTech

Binary Tree Zigzag Level Order Traversal

Bạn có một cây nhị phân được lưu trong mảng root. 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 giá trị -1 thừa.

Trả về giá trị các nút theo từng tầng theo thứ tự zíc zắc: tầng của gốc từ trái sang phải, tầng tiếp theo từ phải sang trái, rồi tiếp tục luân phiên như vậy đến tầng sâu nhất. Cách này còn được gọi là duyệt theo thứ tự tầng xoắn ốc.

Hàm

zigzagLevelOrder(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ột danh sách giá trị cho mỗi cấp, bắt đầu từ cấp cao nhất, luân phiên từ trái sang phải và từ phải sang trá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] ≤ 104.
  • Giá trị các nút khác nhau.
  • root[0] không bao giờ là -1, vì vậy cây (tree) có ít nhất một nút.
  • Mảng (array) có thể kết thúc bằng các phần tử -1 bổ sung 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à cây có tối đa 14 tầng.

Ví dụ

Đầu vào
root = [8, 12, 5, 1, 9, -1, 14, -1, -1, 4, 2, -1, -1, 11]
Đầu ra
[[8], [5, 12], [1, 9, 14], [11, 2, 4]]
Giải thích
Đọc từ trái sang phải, các cấp độ là 8; 12, 5; 1, 9, 14; 4, 2, 11. Cấp độ 1 và 3 chạy ngược lại: [5, 12] và [11, 2, 4].
challenge icon

Câu hỏi mở rộng

Bạn có thể đặt từng giá trị thẳng vào vị trí cuối cùng trong hàng của nó mà không cần đảo ngược và không cần ngăn xếp thứ hai không?

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

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

root = [8, 12, 5, 1, 9, -1, 14, -1, -1, 4, 2, -1, -1, 11]

Đầu ra mong đợi

[[8], [5, 12], [1, 9, 14], [11, 2, 4]]