Menu
CoddyTech

Boundary Traversal of Binary Tree

Trung bìnhDuyệt câypython iconjava iconcpp iconc iconjs icon+10

Mảng root chứa một cây nhị phân theo thứ tự từng tầng: gốc ở chỉ số 0, các nút con của chỉ số i ở 2i+1 (bên trái) và 2i+2 (bên phải), dùng -1 cho vị trí trống và có thể có thêm các phần tử -1 ở cuối. Nút lá là nút không có nút con.

Trả về đường biên theo chiều ngược kim đồng hồ, bắt đầu từ gốc:

  1. Gốc.
  2. Đường biên bên trái, từ trên xuống dưới: bắt đầu từ nút con bên trái của gốc, đi đến nút con bên trái nếu có, nếu không thì đi đến nút con bên phải. Dừng trước nút lá.
  3. Mọi nút lá, từ trái sang phải.
  4. Đường biên bên phải, từ dưới lên trên: đối xứng với đường biên bên trái, bắt đầu từ nút con bên phải của gốc.

Không liệt kê nút nào hai lần, vì vậy cây chỉ có một nút thì chỉ trả về gốc.

Hàm

boundaryTraversal(root: integer-array) → integer-array
rootinteger-array
cây nhị phân theo thứ tự từng mức, với -1 cho vị trí trống
Trả vềinteger-array
các giá trị biên, ngược chiều kim đồng hồ tính từ gốc

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] ≤ 105.
  • 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à độ sâu tối đa là 14.
  • Giá trị của các nút là khác nhau.

Ví dụ

Đầu vào
root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]
Đầu ra
[7, 3, 1, 4, 6, 8, 9]
Giải thích
Sau nút gốc 7, biên trái là 3: nút con 1 của nó là một nút lá. Các nút lá là 1, 4, 6, 8. Biên phải là 9, nằm phía trên nút lá 8.
challenge icon

Câu hỏi mở rộng

Bạn sẽ liệt kê đường bao theo chiều kim đồng hồ như thế nào: nút gốc, cạnh phải từ trên xuống dưới, các nút lá từ phải sang trái, rồi cạnh trái từ dưới lên trên?

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

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]

Đầu ra mong đợi

[7, 3, 1, 4, 6, 8, 9]