이제 재귀 함수를 이용해 각 순회를 구현해 볼까요?
코드 13-10 data_structure_2/ds_3/binary_tree.py ⑥ (BinaryTree 클래스 ③)
# 전위 순회로 트리를 순회 # 인자(cur: 방문 노드, func: 데이터 처리 함수) def preorder_traverse(self, cur, func): # 탈출 조건 # 방문한 노드가 빈 노드일 때 if not cur: return # 먼저 방문 노드의 데이터를 인자로 함수 호출 func(cur.data) # 왼쪽 서브 트리 순회 self.preorder_traverse(cur.left, func) # 오른쪽 서브 트리 순회 self.preorder_traverse(cur.right, func) # 중위 순회로 트리를 순회 # 인자(cur: 방문 노드, func: 데이터 처리 함수) def inorder_traverse(self, cur, func): # 탈출 조건 if not cur: return # 먼저 왼쪽 서브 트리를 순회 self.inorder_traverse(cur.left, func) # 왼쪽 서브 트리를 모두 순회한 후 # 방문 노드의 데이터를 인자로 함수 호출 func(cur.data) # 오른쪽 서브 트리 순회 self.inorder_traverse(cur.right, func) # 후위 순회로 트리를 순회 # 인자(cur: 방문 노드, func: 데이터 처리 함수) def postorder_traverse(self, cur, func): # 탈출 조건 if not cur: return # 왼쪽 서브 트리 순회 self.postorder_traverse(cur.left, func) # 오른쪽 서브 트리 순회 self.postorder_traverse(cur.right, func) # 왼쪽 서브 트리와 오른쪽 서브 트리를 모두 순회한 후 # 마지막으로 방문 노드의 데이터를 인자로 함수 호출 func(cur.data)