Menu
CoddyTech

Top View of Binary Tree

Trung bìnhDuyệt câyBămpython iconjava iconcpp iconc iconjs icon+10

Bạn nhận được một 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 ở 2*i+1 (bên trái) và 2*i+2 (bên phải), còn -1 biểu thị vị trí trống.

Nút gốc nằm ở cột 0; nút con bên trái nằm ở cột bên trái nút cha một cột, còn nút con bên phải nằm ở cột bên phải một cột. Khi nhìn từ trên xuống, bạn thấy nút nông nhất ở mỗi cột; nếu có nhiều nút cùng độ sâu, chọn nút xuất hiện đầu tiên trong cấp đó khi đi từ trái sang phải (nút có chỉ số nhỏ hơn). Trả về các giá trị nhìn thấy, từ cột ngoài cùng bên trái đến cột ngoài cùng bên phải.

Hàm

topView(root: integer-array) → integer-array
rootinteger-array
cây theo thứ tự heap, với -1 cho vị trí trống
Trả vềinteger-array
giá trị nhìn từ trên xuống trong mỗi cột, bắt đầu từ cột ngoài cùng bên 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, 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 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 cấp.

Ví dụ

Đầu vào
root = [5, 2, 9, 4, 7, 1, 6]
Đầu ra
[4, 2, 5, 9, 6]
Giải thích
Từ trái sang phải, các cột chứa 4 (cột -2), 2 (-1), nút gốc 5 (0), 9 (1) và 6 (2). 7 và 1 cũng nằm ở cột 0, nhưng nút gốc nằm phía trên chúng.
challenge icon

Câu hỏi mở rộng

Với các đối tượng nút thay vì một mảng, không có chỉ số để phân định khi hòa. Bạn sẽ nêu quy tắc phân định thế nào, và code tìm kiếm theo chiều rộng của bạn có thay đổi không?

Đặt lại code
def topView(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, 9, 6]