[백준 1991] 트리 순회

코뉴·2021년 8월 20일
0

백준🍳

목록 보기
59/149

https://www.acmicpc.net/problem/1991

🥚문제


🥚입력/출력


🍳코드

# 노드
class Node:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

# 노드의 개수
n = int(input())
# 노드 리스트
nodes = [None]*n

for _ in range(n):
    current, left, right = input().strip().split()

    # current 노드가 처음 등장한 노드라면 새로 생성
    if nodes[ord(current) - 65] is None:
        node = Node(current)
        nodes[ord(current) - 65] = node
    # 예전에 어떤 노드의 자식 노드로 등장한 적이 있다면 그 노드 그대로 사용
    else:
        node = nodes[ord(current)-65]

    if left != ".":
        if nodes[ord(left)-65] is None:
            # 노드 생성
            leftNode = Node(left)
            # 노드 연결
            node.left = leftNode
            # 노드 리스트에 추가
            nodes[ord(left)-65] = leftNode
        # 노드 리스트에 존재지 않았던 value인 경우
        else:
            node.left = nodes[ord(left)-65]
    if right != ".":
        if nodes[ord(right)-65] is None:
            # 노드 생성
            rightNode = Node(right)
            # 노드 연결
            node.right = rightNode
            # 노드 리스트에 추가
            nodes[ord(right)-65] = rightNode
        # 노드 리스트에 존재지 않았던 value인 경우
        else:
            node.right = nodes[ord(right)-65]


# 확인용 출력
'''
for n in nodes:
    if n is not None:
        print("value", n.value, end="")
        if n.left is None:
            print(" left None", end="")
        else:
            print(" left", n.left.value, end="")

        if n.right is None:
            print(" right None", end="")
        else:
            print(" right", n.right.value, end="")
        print()
'''

# 전위 순회 함수
def preorder(node):
    print(node.value, end="")
    # 왼쪽 자식이 존재하면
    if node.left is not None:
        preorder(node.left)
    # 오른쪽 자식이 존재하면
    if node.right is not None:
        preorder(node.right)

# 중위 순회 함수
def inorder(node):
    # 왼쪽 자식이 존재하면
    if node.left is not None:
        inorder(node.left)
    print(node.value, end="")
    # 오른쪽 자식이 존재하면
    if node.right is not None:
        inorder(node.right)

# 후위 순회 함수
def postorder(node):
    # 왼쪽 자식이 존재하면
    if node.left is not None:
        postorder(node.left)
    # 오른쪽 자식이 존재하면
    if node.right is not None:
        postorder(node.right)
    print(node.value, end="")

# 전위 순회
preorder(nodes[0])
print()

# 중위 순회
inorder(nodes[0])
print()

# 후위 순회
postorder(nodes[0])
print()

🧂아이디어

profile
코뉴의 도딩기록

0개의 댓글