오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

Algorithm

트리 순회 순서 변경 python

junha6316 2022. 9. 4. 20:27

https://algospot.com/judge/problem/read/TRAVERSAL

 

algospot.com :: TRAVERSAL

트리 순회 순서 변경 문제 정보 문제 트리를 순회하는 알고리즘은 트리의 모든 노드들을 특정 순서에 맞춰 방문하지만, 트리는 배열처럼 1차원적인 구조가 아니기 때문에 단 한 가지의 당연한

algospot.com

import sys
input = sys.stdin.readline

def get_sub_tree(root, inorder):
    root_idx = inorder.index(root)
    left_tree = inorder[:root_idx]
    right_tree = inorder[root_idx + 1:]
    return root_idx, left_tree, right_tree


def printPostOrder(preorder, inorder):
    if not len(preorder):
        return
    root = preorder[0]
    root_idx , L, R = get_sub_tree(root, inorder)
    printPostOrder(preorder[1:root_idx + 1], L)
    printPostOrder(preorder[root_idx + 1: len(preorder)], R)
    print(root, end=" ")


n_test = int(input())

for i in range(n_test):
    num_node = int(input())
    preorder = list(map(int, input().split()))
    inorder = list(map(int, input().split()))
    printPostOrder(preorder, inorder)
    print()
    
"""
* 지속적으로 참조하는 것을 pop과 같은 메서드로 변환하지 않을 것
* pre_order의 원소는 그 원소를 root로 하는 서브트리
* inorder는 root 값 기준으로 왼쪽과 오른쪽이 각각 서브트리의 원소
* 전위 순회: root -> 왼쪽 -> 오른쪽
* 중위 순회: 왼 -> root -> 오
* 후위 순회: 왼 -> 오 -> root
"""

'Algorithm' 카테고리의 다른 글

08/05 BOJ 1261 알고스팟 파이썬  (0) 2020.08.05