Terinspirasi oleh pertanyaan terbaru tentang ...
Tulis fungsi untuk mencetak pohon biner dalam format berikut:
3
/ \
1 5
\ / \
2 4 6
- Outputnya harus terdiri dari garis node, diikuti oleh garis
/
dan\
karakter yang menunjukkan hubungan, diikuti oleh garis node, dll. - Anda dapat menganggap semua node direpresentasikan sebagai satu karakter.
- Node yang berdekatan pada level terendah harus dipisahkan oleh setidaknya satu ruang, node lebih jauh harus dipisahkan sebagaimana mestinya.
- Node dengan dua anak harus ditempatkan tepat di tengah anak-anak langsung mereka.
- Garis miring hubungan harus berada di tengah antara orang tua dan anak yang sesuai (putaran ke arah mana pun yang Anda inginkan).
Memasukkan:
Input akan diberikan sebagai argumen untuk fungsi Anda. Saya tidak akan menentukan struktur pohon yang tepat, namun itu harus dapat digunakan sebagai pohon biner yang sebenarnya. Tidak "pohon diwakili dalam program saya karena string secara kebetulan tampak seperti hasil yang diharapkan".
Anda dapat mencetak ke aliran output atau mengembalikan string yang berisi output, pilihan Anda.
Poin untuk kode terpendek, tapi saya lebih suka solusi panjang yang sepenuhnya berfungsi daripada 90% -pekerja pendek.
Perbarui untuk karunia:
Untuk hadiah, saya (Pengoptimal) melakukan sedikit perubahan:
- Masukan dapat dari argumen STDIN, ARGV atau fungsi.
- Output harus pada STDOUT (atau
console.log
untuk JS) - Anda dapat berasumsi bahwa input dalam bentuk array, misalnya.
[1,2,3]
atau[1 2 3]
Pembaruan 2 - Pohon biner sebenarnya harus pohon pencarian biner. Karena saya tidak menyebutkan ini pada awalnya, saya akan memungkinkan pengguna untuk memperlakukan mengubah array normal menjadi array pohon pencarian biner sebagai program terpisah dan jumlah byte terakhir hanya akan untuk program untuk mengambil dalam array sebagai argumen dan mencetaknya seperti pohon biner.
sumber
30000,1000,499999
Jawaban:
Fortran 77 - 1085 karakter
Pohon diwakili dalam larik input
t
dengan cara biasa, root di 1, root-> kiri di 2, root-> kanan di 3 root-> kiri-> kiri di 4 ...Output harus sesuai dengan terminal konvensional hingga 5 level.
Saya menggunakan tepat satu garis miring di antara setiap pasangan node, yang terlihat cukup konyol di dekat bagian atas begitu ada empat atau lebih level. Saya mengizinkan hingga tiga digit node.
Program lengkap dengan komentar dan scaffold peluncuran:
Output dengan input yang setara dengan contoh:
sumber
CJam,
10099 byteInput harus berupa daftar karakter, tanpa karakter kontrol ascii. Node kosong dilambangkan dengan spasi. Itu juga harus pohon biner yang sempurna dengan tepat 2 n -1 node.
Contoh:
Atau cukup gunakan string:
Keluaran:
Penjelasan
Skrip konversi
Ini menerima karakter atau angka satu digit.
Contoh (semuanya sama):
Keluaran:
Ini adalah konstruksi pohon Cartesian yang lurus ke depan.
sumber
Python 2, 411 byte
Catatan: Level indentasi pertama adalah 1 spasi, yang kedua adalah satu tab.
Panggil
f
dengan daftar string satu karakter atauNone
, misalnya.f(['1',None,'3'])
. Daftar tidak boleh kosong.Ini harus mematuhi aturan untuk hadiah.
Skrip konverter:
Mengkonversi dan mengatur ke format yang digunakan oleh printer pohon biner. Contoh:
-
Contoh:
Untuk menjalankan ini, Anda harus memiliki nama file utama
bt.py
dan nama file konverterconv.py
.sumber
['1','2','3','4','5','6','7','8','9']
array bukanlah yang Anda tunjukkan. Seharusnya3
sebagai anak kanan2
yang merupakan anak kanan1
yang merupakan elemen root.APL, 125 karakter
Contoh:
Diuji di sini.
sumber
Ruby, 265 byte
Versi @proudhaskeller, 269 byte
Penjelasan
Versi verbose:
Contoh
memberi:
(Saya belum menulis skrip konversi.)
sumber