root 노드
: 트리에서 가장 위에 있는 노드, 트리의 시작 노드부모 노드
: 특정 노드의 직속 상위 노드자식 노드
: 특정 노드의 직속 하위 노드형제 노드
: 같은 부모를 갖는 노드leaf 노드
: 자식 노드를 갖고 있지 않은, 가장 말단에 있는 노드깊이
: 특정 노드가 root 노드
에서 떨어져 있는 거리레벨
: 깊이 + 1
, 특정 깊이인 노드들을 묶어서 표현할 때 사용높이
: 트리에서 가장 깊이 있는 노드의 깊이부분 트리
: 현재 트리의 일부분을 이루고 있는 더 작은 트리class Node:
"""이진 트리 노드 클래스"""
def __init__(self, data):
"""데이터와 두 자식 노드에 대한 레퍼런스를 갖는다"""
self.data = data
self.left_child = None
self.right_child = None
# 노드 인스턴스 생성
root_node = Node(2)
node_B = Node(3)
node_C = Node(5)
node_D = Node(7)
node_E = Node(11)
# B와 C를 root 노드의 자식으로 지정
root_node.left_child = node_B
root_node.right_child = node_C
# D와 E를 B의 자식으로 지정
node_B.left_child = node_D
node_B.right_child = node_E
# root 노드에서 왼쪽 자식 노드 받아오기
test_node_1 = root_node.left_child
print(test_node_1.data)
# 노드 B의 노드에서 오른쪽 자식 노드 받아오기
test_node_2 = node_B.right_child
print(test_node_2.data)
# 3
# 11
👉 순서를 어떻게 하냐에 따라 순회가 조금씩 달라짐
👉 트리를 순회하면 노드들 사이에 선형적 순서를 만들 수 있다
class Node:
"""이진 트리 노드를 나타내는 클래스"""
def __init__(self, data):
"""이진 트리 노드는 데이터와 두 자식 노드에 대한 레퍼런스를 갖는다"""
self.data = data
self.left_child = None
self.right_child = None
def traverse_inorder(node):
"""in-order 순회 함수"""
if node is not None:
traverse_inorder(node.left_child)
print(node.data)
traverse_inorder(node.right_child)
# 여러 노드 인스턴스 생성
node_A = Node("A")
node_B = Node("B")
node_C = Node("C")
node_D = Node("D")
node_E = Node("E")
node_F = Node("F")
node_G = Node("G")
node_H = Node("H")
node_I = Node("I")
# 생성한 노드 인스턴스들 연결
node_F.left_child = node_B
node_F.right_child = node_G
node_B.left_child = node_A
node_B.right_child = node_D
node_D.left_child = node_C
node_D.right_child = node_E
node_G.right_child = node_I
node_I.left_child = node_H
# 노드 F를 root 노드로 만든다
root_node = node_F
# 만들어 놓은 트리를 in-order로 순회한다
traverse_inorder(root_node)
# A
# B
# C
# D
# E
# F
# G
# H
# I