아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

이가 빠진 이진 트리

면접 대비

시간 제한1초메모리 제한1024 MB

요약
레벨 순서로 주어진 포화 이진 검색 트리에서 가려진 리프 하나를 복원하고, 새 값을 삽입한 뒤 후위 순회 결과를 출력한다.
난이도

보통10점 중 6점

유형
트리, 이분 탐색, 분할 정복, 재귀
정답자
아직 제출이 없습니다

문제

김소마는 최근에 포화 이진 트리에 대해 배웠다. 포화 이진 트리란, 이진 트리에서 리프 노드를 제외한 모든 노드가 두 자식 노드를 가지며, 모든 리프 노드가 채워진 것을 말한다. 아래의 그림을 통해 쉽게 이해하자.

김소마는 예쁜 포화 이진 검색 트리를 그려 만족했지만, 밥 먹다 흘린 소스가 리프 노드 한 개를 가려버렸다. 여기서 이진 검색 트리란, 모든 왼쪽 자식이 자신보다 작고, 모든 오른쪽 자식이 자신보다 큰 이진 트리를 이야기한다.

그림을 버리려던 찰나, 김소마는 갑자기 포화 이진 검색 트리를 유지하며, 임의의 수를 넣을 때, 트리 구조가 어떻게 바뀔지 궁금해졌다. 멍청한 김소마를 위해 당신이 도와주자.

입력

첫 번째 줄에 가려진 노드를 포함한 노드의 개수 NN이 주어진다. (N=2k−1;(N=2^k-1; 2≤k≤17;2 \le k \le 17; kk는 정수))

두 번째 줄에 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. A_iA\_i는 ii번 노드에 적혀있는 수이다. (0≤A_i≤109;(0 \le A\_i \le 10^9; 가려진 하나의 노드에 대해서만 A_i=−1)A\_i = -1) i≠ji \neq j이면 A_i≠A_jA\_i \neq A\_j이다. 노드 번호는 루트 노드부터 시작하여, 같은 깊이 내 왼쪽에서 오른쪽으로 갈수록 증가하는 순서로 매겨진다 (아래 그림 참조).

세 번째 줄에 트리에 넣을 수 XX가 주어진다. (0≤X≤109;(0 \le X \le 10^9; X≠A_i)X \neq A\_i)

입력으로 주어지는 모든 수는 정수이다.

출력

첫 번째 줄에 바뀐 트리를 후위(postorder) 순회한 결과를 출력한다. (단, 왼쪽 자식 노드를 먼저 방문한다.)

예제1

  1. 예제 1

    입력
    7
    10 5 17 1 -1 14 21
    18
    
    예상 출력
    1 10 5 17 21 18 14