자료구조/트리

트리 순회

아몬드바 2023. 8. 14. 10:40
728x90

정의

 자료 구제에 저장된 모든 데이터를 출력

 출력하고자 하는 트리의 루트노드를 파라미터로 받음

 

동작

 1. 재귀적으로 왼쪽 부분 트리 순회

     루트의 왼쪽만 출력

def traverse(node):
	traverse(node.left_child)

     

 2. 재귀적으로 오른쪽 부분 트리 순회

     루트의 오른쪽만 출력

def traverse(node):
	traverse(node.right_child)

 3. 현재 노드를 출력

     노드의 data로 접근

def traverse(node):
	print(node.data)

pre-order 순회(두개의 부분 트리를 순회하기 전에 노드를 출력하는 방식)

 동작방식

  1. 현재 노드를 출력

  2. 재귀적으로 왼쪽 부분 트리 순회 - 순서는 왼쪽자식에서 오른쪽 자식

  3. 재귀적으로 오른쪽 부분 트리 순회

* F, B, A, D, C, E, G, I, H

post-order 순회(부분 트리를 순회한 후에 노드를 출력하는 방식)

 동작방식

  1. 루트노드의 왼쪽을 재귀적으로 왼쪽 부분 트리 순회

  2. 루트노드의 오른쪽을 재귀적으로 오른쪽 부분 트리 순회

  3. 현재 노드를 출력

* A, C, E, D, B, H, I, G, F

in-order 순회

 동작방식

  1. 루트노드의 왼쪽을 재귀적으로 왼쪽 부분 트리 순회

  2. 현재 노드를 출력

  3. 루트노드의 오른쪽을 재귀적으로 오른쪽 부분 트리 순회

* A, B, C, D, E, F, G, H, I

구현

# 재귀를 이용한 in-order 트리순회
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)  # 재귀적으로 오른쪽 부분 트리 순회
    # if node.left_child is not None:
    #     left_node = node.left_child
    #     traverse_inorder(left_node)
  
    # print(node.data)

    # if node.right_child is not None:
    #     right_node = node.right_child
    #     traverse_inorder(right_node)


# 여러 노드 인스턴스 생성
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)
728x90

'자료구조 > 트리' 카테고리의 다른 글

이진 탐색 트리  (0) 2023.08.14
힙 - 우선순위 큐  (0) 2023.08.14
힙 - 트리  (0) 2023.08.14
트리  (0) 2023.08.14