메모/알고리즘
[백준] Python - 트리 순회
Floodnut
2021. 9. 24. 16:24
1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파
www.acmicpc.net
이진 트리 순회 문제다.
트리 순회보다 트리 생성하는게 시간이 더 걸렸다...
파이썬 코드 확인
더보기
from sys import stdin
class Node:
def __init__(self,node):
self.info = node
self.left = None
self.right = None
class Tree:
def __init__(self):
self.root = None
def createTree(self,treeDict,treeNode):
treeDict[treeNode[0]] = Node(treeNode) if treeDict.get(treeNode[0]) is None else treeDict[treeNode[0]]
treeDict[treeNode[1]] = Node(treeNode[1]) if treeNode[1] != '.' and treeDict.get(treeNode[1]) is None else None
treeDict[treeNode[2]] = Node(treeNode[2]) if treeNode[2] != '.' and treeDict.get(treeNode[2]) is None else None
if self.root == None:
self.root = treeDict[treeNode[0]]
treeDict[treeNode[0]].info = treeNode
treeDict[treeNode[0]].left = treeDict.get(treeNode[1])
treeDict[treeNode[0]].right = treeDict.get(treeNode[2])
return treeDict
def preOrder(self, treeNode):
print(treeNode.info[0],end='')
if treeNode.left is not None :
self.preOrder(treeNode.left)
if treeNode.right is not None :
self.preOrder(treeNode.right)
def inOrder(self, treeNode):
if treeNode.left is not None :
self.inOrder(treeNode.left)
print(treeNode.info[0],end='')
if treeNode.right is not None :
self.inOrder(treeNode.right)
def postOrder(self, treeNode):
if treeNode.left is not None :
self.postOrder(treeNode.left)
if treeNode.right is not None :
self.postOrder(treeNode.right)
print(treeNode.info[0],end='')
if __name__ == "__main__":
treeDict, bTree, n = dict(), Tree(), int(stdin.readline())
for i in range(n):
treeNode = stdin.readline().split()
treeDict = bTree.createTree(treeDict,treeNode)
del(treeDict['.'])
bTree.preOrder(treeDict['A'])
print("")
bTree.inOrder(treeDict['A'])
print("")
bTree.postOrder(treeDict['A'])
print("")