지난 글에서는 이진트리의 간단한 구현 방법을 다뤘습니다.
이번 글에서는 이진트리의 전위, 중위, 후위 순회에 대해 알아봅시다.
전위순회
전위순회는
- 루트 노드에서 시작해서
- 왼쪽 하위 트리를 방문하고
- 오른쪽 하위 트리를 방문하는 방식입니다.
이 트리에서 전위순회를 해봅시다.
먼저, 왼쪽 하위 트리와 오른쪽 하위트리를 구분합니다.
가장 먼저 루트 노드를 방문합니다.
현재 방문 목록{1}
그 다음에는 왼쪽 하위 트리를 방문합니다.
왼쪽 하위 트리의 루트 노드를 방문합니다.
현재 방문 목록{1, 2}
그 다음은 2번 노드의 왼쪽 자식인 4를 방문합니다.
현재 방문 목록{1, 2, 4}
그리고 2번 노드의 오른쪽 자식인 5를 방문합니다.
현재 방문 목록{1, 2, 4, 5}
전체 트리의 왼쪽 하위 트리 방문을 끝냈으니 오른쪽 하위 트리를 방문합니다.
오른쪽 하위 트리의 루트 노드를 방문합니다.
현재 방문 목록{1, 2, 4, 5, 3}
그 다음으로는 왼쪽 자식과 오른쪽 자식을 각각 방문하고 순회를 마칩니다.
최종 방문 목록{1, 2, 4, 5, 3, 6, 7}
중위순회
중위순회는
- 왼쪽 하위 트리를 먼저 방문하고
- 루트 노드를 방문한 뒤
- 오른쪽 하위 트리를 방문하는 순회 방법입니다.
위에서 사용한 트리를 그대로 사용합시다.
가장 먼저 왼쪽 하위 트리를 방문합니다. (이 트리를 L이라고 칭하겠습니다.)
L의 왼쪽 자식을 방문합니다.
현재 방문 목록{4}
다음으로 L의 루트 노드를 방문합니다.
현재 방문 목록{4, 2}
그 다음에는 L의 오른쪽 자식을 방문합니다.
현재 방문 목록{4, 2, 5}
L을 모두 방문 했으므로 전체 트리의 루트 노드를 방문합니다.
현재 방문 목록{4, 2, 5, 1}
루트 노드를 방문 했으므로 오른쪽 하위 트리를 방문합니다. (R이라고 칭하겠습니다.)
R의 왼쪽 자식을 방문합니다.
현재 방문 목록{4, 2, 5, 1, 6}
R의 루트노드와 오른쪽 자식을 차례로 방문하고 순회를 종료합니다.
최종 방문 목록{4, 2, 5, 1, 6, 3, 7}
후위순회
후위순회는
- 왼쪽 하위 트리를 방문하고
- 오른쪽 하위 트리를 방문한 뒤,
- 루트 노드를 방문합니다.
먼저 왼쪽 하위 트리를 방문합니다. (L이라고 칭하겠습니다.)
L의 왼쪽 자식을 방문합니다.
현재 방문 목록{4}
L의 오른쪽 자식를 방문합니다.
현재 방문 목록{4, 5}
L의 루트 노드를 방문합니다.
현재 방문 목록{4, 5, 2}
그 다음으로 오른쪽 하위 트리를 방문합니다. (R이라고 칭하겠습니다.)
R의 왼쪽 자식을 방문합니다.
현재 방문 목록{4, 5, 2, 6}
R의 오른쪽 자식을 방문합니다.
현재 방문 목록{4, 5, 2, 6, 7}
R의 루트 노드를 방문합니다.
현재 방문 목록{4, 5, 2, 6, 7, 3}
마지막으로 루트 노드를 방문합니다.
최종 방문 목록{4, 5, 2, 6, 7, 3, 1}
여기까지가 이진 트리 순회에 대한 설명입니다.