직무
전체 이진 트리의 사전 주문 및 주문 이후 순회가 주어지면 순차 순회를 리턴하십시오.
순회는 각각 고유하게 노드를 식별 하는 n 개의 양의 정수를 포함하는 두 개의 목록으로 표시됩니다 . 프로그램은 이러한 목록을 가져와 합리적인 I / O 형식을 사용하여 순차 순회 결과를 출력 할 수 있습니다.
입력이 유효하다고 가정 할 수 있습니다 (즉, 목록은 실제로 일부 트리의 순회를 나타냄).
이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.
정의
완전 이진 트리 의 유한 구조 노드 고유 한 양의 정수가 여기에 표현.
전체 이진 트리는 단일 노드 로 구성된 리프입니다 .
1
또는 두 개의 하위 트리 ( 왼쪽 및 오른쪽 하위 트리 라고 함)가있는 하나의 노드 로 구성 되는 브랜치 는 각각 전체 이진 트리입니다.
1 / \ … …
전체 이진 트리의 전체 예는 다음과 같습니다.
6
/ \
3 4
/ \ / \
1 8 5 7
/ \
2 9
전체 이진 트리 의 사전 순서 순회 는 다음과 같이 재귀 적으로 정의됩니다.
- 노드 n을 포함하는 리프 의 선주문 순서 는 목록 [ n ]입니다.
- 노드 n 과 하위 트리 (L, R)를 포함 하는 분기 의 사전 주문 순회 는 목록 [ n ] + 사전 주문 ( L ) + 사전 주문 ( 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 ]입니다.
- (A)의 중위 순회 분기 노드 함유 N 및 서브 트리 (L, R)의 리스트이다 중위 ( L ) + [ N ] + 중위 ( R ).
위의 트리에서는 [1, 3, 2, 8, 9, 6, 5, 4, 7] 입니다.
결론 : 목록 [6, 3, 1, 8, 2, 9, 4, 5, 7] (pre) 및 [1, 2, 9, 8, 3, 5, 7, 4, 6] (post)를 입력으로 프로그램에서 [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"
. (I 노드를 많이 필요로하는 경우도 유니 코드 문자를 사용하여)
"CDE"
입니다. [67, 68, 69]
:)