전위 순회, 중위 순회, 후위 순회 모두 재귀 함수를 통해 순회 순서를 구현합니다. 탈출 조건은 빈 노드일 때입니다. 인자 func는 데이터 처리 함수로 방문 노드의 데이터를 인자로 받아 실행됩니다.
이제 테스트 코드를 작성해서 이전 절에서 만든 이진 트리를 순회해 보겠습니다. 전위 순회, 중위 순회, 후위 순회 모두 그림 13-15부터 13-17까지 순서대로 잘 나오는지 궁금하군요.
코드 13-11 data_structure_2/ds_3/binary_tree.py ⑦ (테스트 코드 ③)
# 방문 노드의 데이터를 출력하는 람다 함수 f = lambda a: print(a, end=' ') # 전위 순회 # 기대 출력 값: 1 2 4 5 3 6 7 bt.preorder_traverse(bt.get_root(), f) print() # 중위 순회 # 기대 출력 값: 4 2 5 1 6 3 7 bt.inorder_traverse(bt.get_root(), f) print() # 후위 순회 # 기대 출력 값: 4 5 2 6 7 3 1 bt.postorder_traverse(bt.get_root(), f) print()
실행결과 1 2 4 5 3 6 7
4 2 5 1 6 3 7
4 5 2 6 7 3 1
실행 결과를 그림 13-15부터 그림 13-17까지와 비교해 보면 각 순회에 따른 노드 방문 순서에 맞게 잘 출력된 걸 알 수 있습니다.