Bài tập
Đưa ra các giao dịch đặt hàng trước và sau đơn hàng của cây nhị phân đầy đủ, trả về giao dịch theo thứ tự của nó.
Các giao dịch sẽ được biểu diễn dưới dạng hai danh sách, cả hai đều chứa n số nguyên dương khác nhau, mỗi số xác định duy nhất một nút. Chương trình của bạn có thể lấy các danh sách này và đưa ra kết quả theo thứ tự kết quả, sử dụng bất kỳ định dạng I / O hợp lý nào.
Bạn có thể cho rằng đầu vào là hợp lệ (nghĩa là các danh sách thực sự đại diện cho các giao dịch của một số cây).
Đây là mã golf , vì vậy mã ngắn nhất tính bằng byte sẽ thắng.
Các định nghĩa
Một cây nhị phân đầy đủ là một cấu trúc hữu hạn các nút , đại diện ở đây bởi nguyên dương độc đáo.
Cây nhị phân đầy đủ là một lá , bao gồm một nút duy nhất :
1
Hoặc một nhánh , bao gồm một nút có hai cây con (được gọi là cây con trái và phải ), mỗi nhánh lần lượt là một cây nhị phân đầy đủ:
1 / \ … …
Đây là một ví dụ đầy đủ về cây nhị phân đầy đủ:
6
/ \
3 4
/ \ / \
1 8 5 7
/ \
2 9
Giao dịch đặt hàng trước của cây nhị phân đầy đủ được định nghĩa đệ quy như sau:
- Truyền tải theo thứ tự trước của một lá chứa nút n là danh sách [ n ].
- Truyền tải theo thứ tự trước của một nhánh chứa một nút n và các cây con (L, R) là danh sách [ n ] + preorder ( L ) + preorder ( R ), trong đó + là toán tử nối danh sách.
Đối với cây trên, đó là [6, 3, 1, 8, 2, 9, 4, 5, 7] .
Truyền tải sau đơn đặt hàng của cây nhị phân đầy đủ được định nghĩa đệ quy như sau:
- Truyền tải theo thứ tự sau của một lá chứa nút n là danh sách [ n ].
- Truyền tải theo thứ tự sau của một nhánh chứa một nút n và các cây con (L, R) là danh sách postorder ( L ) + postorder ( R ) + [ n ].
Đối với cây trên, đó là [1, 2, 9, 8, 3, 5, 7, 4, 6] .
Truyền tải theo thứ tự của cây nhị phân đầy đủ được định nghĩa đệ quy như sau:
- Truyền tải theo thứ tự của một chiếc lá chứa nút n là danh sách [ n ].
- Truyền tải theo thứ tự của một nhánh chứa một nút n và các cây con (L, R) là danh sách inorder ( L ) + [ n ] + inorder ( R ).
Đối với cây trên, đó là [1, 3, 2, 8, 9, 6, 5, 4, 7] .
Tóm lại: đưa ra cặp danh sách [6, 3, 1, 8, 2, 9, 4, 5, 7] (trước) và [1, 2, 9, 8, 3, 5, 7, 4, 6] (bài) làm đầu vào, chương trình của bạn sẽ xuất [1, 3, 2, 8, 9, 6, 5, 4, 7] .
Các trường hợp thử nghiệm
Mỗi trường hợp thử nghiệm là trong định dạng 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"
? (thậm chí sử dụng các chữ cái unicode nếu tôi cần nhiều nút)
"CDE"
không khác lắm so với [67, 68, 69]
:)