Menu
CoddyTech

Vertical Order Traversal of a Binary Tree

Pohon biner disimpan dalam array root dengan urutan heap: akar berada pada indeks 0, anak-anak dari indeks i berada di 2*i+1 (kiri) dan 2*i+2 (kanan), -1 menandai posisi kosong, dan array dapat diakhiri dengan entri -1 tambahan.

Akar berada di kolom 0; anak kiri berada satu kolom di sebelah kiri induknya, anak kanan satu kolom di sebelah kanan. Kembalikan satu list untuk setiap kolom, dari kiri ke kanan. Di dalam kolom, urutkan node dari atas ke bawah, dan urutkan node yang berada di kolom dan kedalaman yang sama berdasarkan nilai secara menaik.

Fungsi

verticalTraversal(root: integer-array) → integer-2d-array
rootinteger-array
pohon dalam urutan heap, dengan -1 untuk posisi kosong
Mengembalikaninteger-2d-array
satu daftar nilai untuk setiap kolom, mulai dari kolom paling kiri, masing-masing dari atas ke bawah

Batasan

  • 1 ≤ root.length ≤ 32767
  • Setiap root[i] adalah -1 atau nilai dengan 0 ≤ root[i] ≤ 5000, dan tidak ada nilai yang muncul dua kali.
  • root[0] tidak pernah -1, jadi pohon memiliki setidaknya satu simpul.
  • array dapat diakhiri dengan entri -1 tambahan setelah node terakhir.
  • Kedua anak dari posisi kosong juga kosong, dan pohon memiliki paling banyak 14 tingkat.

Contoh

Input
root = [5, 2, 9, 4, 7, 1, 6]
Output
[[4], [2], [5, 1, 7], [9], [6]]
Penjelasan
Kolom 0 menyimpan root 5, lalu 7 dan 1 dua tingkat di bawahnya. Keduanya berada di kolom dan kedalaman yang sama, jadi 1 muncul sebelum 7, meskipun 7 berada lebih ke kiri.
challenge icon

Pertanyaan lanjutan

Setiap nilai paling besar 5000. Bisakah kamu memanfaatkan hal itu untuk menghilangkan pengurutan perbandingan dan menyelesaikannya dalam waktu O(n + 5000)?

Reset kode
def verticalTraversal(root):
    # Tulis kodemu di sini

Tes #1

Tes #2

Tes #3

Argumen

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

Output yang diharapkan

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