본문 바로가기
알고리즘/트리

[백준][Python] 4256 트리

by 임짠짠 2022. 3. 11.
반응형
 

4256번: 트리

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 노드의 개수 n이 주어진다. (1 ≤ n ≤ 1,000) BT의 모든 노드에는 1부터 n까지 서로 다른 번호가 매겨져 있다. 다음

www.acmicpc.net

 

코드

import sys

def post(preorder,inorder):
    if len(preorder) == 0:
        return
    elif len(preorder) == 1:
        print(preorder[0], end = ' ')
        return

    r_index = inorder.index(preorder[0])  # 루트노드가 inorder에서 몇 번째에 있는지
    left_in = inorder[0:r_index]
    left_pre = preorder[1:len(left_in)+1]
    post(left_pre,left_in)

    right_in = inorder[r_index+1:]
    right_pre = preorder[len(left_pre)+1:]
    post(right_pre,right_in)
    
    print(preorder[0], end = ' ')

T = int(input())
for _ in range(T):
    n = int(input())
    preorder = list(map(int,sys.stdin.readline().split()))
    inorder = list(map(int,sys.stdin.readline().split()))
    post(preorder,inorder)
    print()

 

설명

전위순회의 가장 첫번째 수는 트리의 루트이다.

중위순회에서 이 루트 번호를 기준으로 왼쪽 트리와 오른쪽 트리로 나뉘게 된다. 이 과정을 왼쪽, 오른쪽 순으로 반복하여 하나의 값만 남았을때 출력하게 되면 후위순회 결과가 나온다. 

반응형

댓글