Tugas
Mengingat traversal pre-order dan post-order dari pohon biner penuh, kembalikan traversal in-order.
Traversal akan direpresentasikan sebagai dua daftar, keduanya berisi n bilangan bulat positif yang berbeda, masing-masing secara unik mengidentifikasi sebuah node. Program Anda dapat mengambil daftar ini, dan menampilkan traversal in-order yang dihasilkan, menggunakan format I / O yang masuk akal.
Anda dapat menganggap input tersebut valid (yaitu, daftar sebenarnya mewakili traversal dari beberapa pohon).
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
Definisi
Sebuah pohon biner penuh adalah struktur terbatas node , diwakili di sini oleh bilangan bulat positif yang unik.
Pohon biner penuh adalah daun , terdiri dari satu simpul :
1
Atau cabang , yang terdiri dari satu simpul dengan dua sub pohon (disebut sub pohon kiri dan kanan ), yang masing-masing, pada gilirannya, pohon biner penuh:
1 / \ … …
Berikut adalah contoh lengkap dari pohon biner penuh:
6
/ \
3 4
/ \ / \
1 8 5 7
/ \
2 9
The pre-order traversal dari pohon biner penuh rekursif didefinisikan sebagai berikut:
- Traversal pre-order dari daun yang mengandung simpul n adalah daftar [ n ].
- Traversal pre-order dari cabang yang berisi simpul n dan sub-pohon (L, R) adalah daftar [ n ] + preorder ( L ) + preorder ( R ), di mana + adalah operator gabungan daftar.
Untuk pohon di atas, itu [6, 3, 1, 8, 2, 9, 4, 5, 7] .
Travers post-order dari pohon biner penuh didefinisikan secara rekursif sebagai berikut:
- Traversal post-order dari daun yang mengandung simpul n adalah daftar [ n ].
- Travers post-order dari cabang yang berisi simpul n dan sub-pohon (L, R) adalah daftar postorder ( L ) + postorder ( R ) + [ n ].
Untuk pohon di atas, bahwa ini [1, 2, 9, 8, 3, 5, 7, 4, 6] .
The in-order traversal dari pohon biner penuh rekursif didefinisikan sebagai berikut:
- Traversal berurutan dari daun yang mengandung simpul n adalah daftar [ n ].
- Travers berurutan cabang yang berisi simpul n dan sub-pohon (L, R) adalah daftar inorder ( L ) + [ n ] + inorder ( R ).
Untuk pohon di atas, itu [1, 3, 2, 8, 9, 6, 5, 4, 7] .
Kesimpulannya: diberi pasangan daftar [6, 3, 1, 8, 2, 9, 4, 5, 7] (pra) dan [1, 2, 9, 8, 3, 5, 7, 4, 6] (pos) sebagai input, program Anda harus menampilkan [1, 3, 2, 8, 9, 6, 5, 4, 7] .
Uji kasus
Setiap test case dalam format preorder, postorder → expected output
.
[8], [8] → [8]
[3,4,5], [4,5,3] → [4,3,5]
[1,2,9,8,3], [9,8,2,3,1] → [9,2,8,1,3]
[7,8,10,11,12,2,3,4,5], [11,12,10,2,8,4,5,3,7] → [11,10,12,8,2,7,4,3,5]
[1,2,3,4,5,6,7,8,9], [5,6,4,7,3,8,2,9,1] → [5,4,6,3,7,2,8,1,9]
"CDE" and "DEC" give "DCE"
:? (bahkan menggunakan huruf unicode jika saya membutuhkan banyak node)"CDE"
tidak jauh berbeda dari[67, 68, 69]
:)Jawaban:
Perl,
6966625653 byteTermasuk +1 untuk
-p
Mengambil postorder diikuti oleh preorder sebagai satu baris yang dipisahkan oleh spasi di STDIN (perhatikan urutan pre dan post). Node direpresentasikan sebagai huruf unik (karakter apa pun yang bukan spasi atau baris baru OK).
inpost.pl
:Menggunakan format numerik murni yang asli membutuhkan lebih banyak perhatian untuk mengidentifikasi satu angka dan muncul pada 73 byte
Digunakan sebagai
sumber
-p
menambahkan;
di akhir, jadi Anda tidak perlu yang terakhir;
.s;.* ;;
->s;.* ;
;
pada akhirnya. Tapi -p sebenarnya menambah\n;
akhir dari sebuah-e
program. Dalam sebuah file ia menambahkan hanya;
jika dan hanya jika file tidak berakhir\n
. Karena saya ingin mengklaim-p
sebagai +1 dan bukan +3, program harus bekerja dari commandline, jadi dengan-e
. Dan saya tidak ingin baris baru palsu dalam hasil yang akan saya dapatkan'
? Jika Anda menjalankannya seperti yang Anda miliki (panggil file dengan<<<
), Anda dapat meninggalkan yang terakhir;
.'
atau menggunakando$0
dll.) Saya selalu mendapat nilai-p
+3 (spasi, minus, p), tetapi jika kode juga akan berfungsi pada baris perintah di mana Anda mendapatkan-e
dan'
secara gratis saya nilai itu+1
karena dapat dibundel dengane
'
gratis. Terima kasih sudah membereskannya.Haskell,
8483 bytesumber
JavaScript (ES6), 100 byte
I / O terdiri dari karakter "aman" (mis. Huruf atau angka). Pendekatan alternatif, juga 100 byte:
sumber