반응형
Java로 구현하는 법을 며칠 전에 공부했다.
2023.04.08 - [Language/Java] - [Java] 트리 구현하기 (이진트리, 전위순회, 중위순회, 후위순회)
[Java] 트리 구현하기 (이진트리, 전위순회, 중위순회, 후위순회)
트리 구현 위와 같은 형태를 갖추며 각 노드는 (Data, Left, Right)의 구조체를 갖는다. public static class Node { char data; Node leftNode; Node rightNode; //Node에 값 넣고 초기화 public Node(char data) { this.data = data; this
baby-dev.tistory.com
오늘은 Python으로 트리를 구현해 보자.
우선 Java의 구조체를 담당하는 부분으로
class Node:
def __init__(self, data, leftNode, rightNode):
self.data = data
self.leftNode = leftNode
self.rightNode = rightNode
class를 선언하고 안에 __init__ 함수를 만들어 준다.
tree는 어느 구조에 담느냐면
n = int(input())
tree = {}
class Node:
def __init__(self, data, leftNode, rightNode):
self.data = data
self.leftNode = leftNode
self.rightNode = rightNode
for _ in range(n):
data, left, right = map(str, input().split())
if left == '.':
left = None
if right == '.':
right = None
tree[data] = Node(data, left, right)
tree = {}에 담는다.
이후 전위, 중위, 후위 순회는 Java와 동일하게 재귀로 처리한다.
def preOrder(node):
print(node.data, end="")
if node.leftNode != None:
preOrder(tree[node.leftNode])
if node.rightNode != None:
preOrder(tree[node.rightNode])
def inOrder(node):
if node.leftNode != None:
inOrder(tree[node.leftNode])
print(node.data, end="")
if node.rightNode != None:
inOrder(tree[node.rightNode])
def postOrder(node):
if node.leftNode != None:
postOrder(tree[node.leftNode])
if node.rightNode != None:
postOrder(tree[node.rightNode])
print(node.data, end="")
전체 코드
(백준 1991번 - 트리 순회의 정답 코드)
https://www.acmicpc.net/problem/1991
1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파
www.acmicpc.net
import sys
input = sys.stdin.readline
n = int(input())
tree = {}
class Node:
def __init__(self, data, leftNode, rightNode):
self.data = data
self.leftNode = leftNode
self.rightNode = rightNode
def preOrder(node):
print(node.data, end="")
if node.leftNode != None:
preOrder(tree[node.leftNode])
if node.rightNode != None:
preOrder(tree[node.rightNode])
def inOrder(node):
if node.leftNode != None:
inOrder(tree[node.leftNode])
print(node.data, end="")
if node.rightNode != None:
inOrder(tree[node.rightNode])
def postOrder(node):
if node.leftNode != None:
postOrder(tree[node.leftNode])
if node.rightNode != None:
postOrder(tree[node.rightNode])
print(node.data, end="")
for _ in range(n):
data, left, right = map(str, input().split())
if left == '.':
left = None
if right == '.':
right = None
tree[data] = Node(data, left, right)
preOrder(tree['A'])
print()
inOrder(tree['A'])
print()
postOrder(tree['A'])
반응형
'Language > Python' 카테고리의 다른 글
[Python] 진법 변환 정리 (0) | 2023.04.27 |
---|---|
[Python] 리스트에 특정 값이 있는지 체크하기 (0) | 2022.10.02 |
[Python] sys.stdin.readline 입력 받기 (0) | 2022.09.30 |
[Python] reverse, reversed 차이 (0) | 2022.09.13 |
[Python] 현재 날짜 가져오기 (0) | 2022.08.08 |
댓글