Görev
Tam bir ikili ağacın sipariş öncesi ve sipariş sonrası geçişleri göz önüne alındığında, siparişteki geçişini döndürün.
Geçişler, her biri bir düğümü benzersiz şekilde tanımlayan n farklı pozitif tamsayı içeren iki liste olarak temsil edilecektir . Programınız bu listeleri alabilir ve ortaya çıkan sıralı geçişi makul herhangi bir I / O formatı kullanarak çıkarabilir.
Girişin geçerli olduğunu varsayabilirsiniz (yani, listeler aslında bir ağacın geçişlerini temsil eder).
Bu kod golfüdür , bu nedenle bayttaki en kısa kod kazanır.
Tanımlar
Bir tam ikili ağaç sonlu yapıdır düğümler eşsiz pozitif tamsayılar tarafından burada temsil.
Tam ikili ağaç ya bir olan yaprak tek oluşan düğüm :
1
Ya da her biri tam bir ikili ağaç olan iki alt ağaçtan ( sol ve sağ alt ağaç denir) bir düğümden oluşan bir dal :
1 / \ … …
İşte tam bir ikili ağacın tam bir örneği:
6
/ \
3 4
/ \ / \
1 8 5 7
/ \
2 9
Ön sipariş geçişi aşağıdaki gibi tam bir ikili ağacın yinelemeli tanımlanır:
- N düğümü içeren bir yaprağın ön sıradan geçişi listedir [ n ].
- N düğümü ve alt ağaçlar (L, R) içeren bir dalın ön siparişi çapraz geçişi , liste [ n ] + ön sipariş ( L ) + ön sipariş ( R ) 'dir; burada +, liste birleştirme operatörüdür.
Yukarıdaki ağaç için bu [6, 3, 1, 8, 2, 9, 4, 5, 7] .
Sonrası düzen geçişi aşağıdaki gibi tam bir ikili ağacın yinelemeli tanımlanır:
- N düğümü içeren bir yaprağın sıradan geçişi listedir [ n ].
- N düğümü ve alt ağaçlar (L, R) içeren bir dalın sipariş sonrası geçişi , liste postorder ( L ) + postorder ( R ) + [ n ] 'dir.
Yukarıdaki ağaç için bu [1, 2, 9, 8, 3, 5, 7, 4, 6] .
İçinde sipariş geçişi aşağıdaki gibi tam bir ikili ağacın yinelemeli tanımlanır:
- N düğümü içeren bir yaprağın sıralı olarak geçmesi liste [ n ] 'dir.
- N düğümü ve alt ağaçlar (L, R) içeren bir dalın sıralı olarak geçişi , liste sırası ( L ) + [ n ] + sırası ( R ) ' dır .
Yukarıdaki ağaç için bu [1, 3, 2, 8, 9, 6, 5, 4, 7] .
Sonuç olarak: [6, 3, 1, 8, 2, 9, 4, 5, 7] (ön) ve [1, 2, 9, 8, 3, 5, 7, 4, 6] çift çifti göz önüne alındığında (post) giriş olarak programınız [1, 3, 2, 8, 9, 6, 5, 4, 7] çıktısını almalıdır .
Test senaryoları
Her test durumu formattadır 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"
? (çok sayıda düğüme ihtiyacım olursa unicode harfleri bile kullanıyor)
"CDE"
dan çok farklı değil [67, 68, 69]
:)