Завдання
Враховуючи обхід попереднього замовлення та після замовлення повного бінарного дерева, поверніть його обхід по порядку.
Переходи будуть представлені у вигляді двох списків, обидва містять n чітких натуральних чисел, кожен з яких однозначно ідентифікує вузол. Ваша програма може приймати ці списки та виводити отриманий в результаті прохід по порядку, використовуючи будь-який розумний формат вводу / виводу.
Ви можете припустити, що введення є дійсним (тобто списки фактично представляють обхід якогось дерева).
Це код-гольф , тому виграє найкоротший код у байтах.
Визначення
Повний бінарне дерево є кінцевою структурою вузлів , представленої тут унікальними позитивними цілими числами.
Повне двійкове дерево - це або листок , що складається з одного вузла :
1
Або гілка , що складається з одного вузла з двома підрядками (звані лівими та правими підтрубками ), кожне з яких, у свою чергу, є повним бінарним деревом:
1 / \ … …
Ось повний приклад повного бінарного дерева:
6
/ \
3 4
/ \ / \
1 8 5 7
/ \
2 9
Передзамовлення обходу повного двійкового дерева рекурсивно визначається наступним чином :
- Попереднє обхід аркуша, що містить вузол n, є списком [ n ].
- Перехід гілки, що містить вузол n та піддерева (L, R), перед замовленням - це список [ n ] + preorder ( L ) + preorder ( R ), де + - оператор конкатенації списку.
Для вищевказаного дерева це [6, 3, 1, 8, 2, 9, 4, 5, 7] .
Пост-порядок обходу повного двійкового дерева рекурсивно визначається наступним чином :
- Поперечний перехід листа, що містить вузол n, є списком [ n ].
- Перехід гілки, що містить вузол n та під-дерева (L, R) після замовлення, є списком порядок ( L ) + порядок ( R ) + [ n ].
Для вищевказаного дерева це [1, 2, 9, 8, 3, 5, 7, 4, 6] .
Обхід в замовленні повного двійкового дерева рекурсивно визначаються наступним чином :
- Порядок обходу аркуша, що містить вузол n, є списком [ n ].
- Поперечний порядок гілки, що містить вузол n та під-дерева (L, R), є списком inorder ( L ) + [ n ] + inorder ( R ).
Для вищевказаного дерева це [1, 3, 2, 8, 9, 6, 5, 4, 7] .
На закінчення: дано пару списків [6, 3, 1, 8, 2, 9, 4, 5, 7] (попередньо) та [1, 2, 9, 8, 3, 5, 7, 4, 6] (повідомлення) як вхідна інформація, ваша програма повинна вивести [1, 3, 2, 8, 9, 6, 5, 4, 7] .
Тестові справи
Кожен тестовий випадок у форматі 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"
? (навіть використовуючи унікодні букви, якщо мені потрібно багато вузлів)
"CDE"
це не дуже відрізняється від [67, 68, 69]
:)