[알고리즘] 재귀 함수를 이용한 트리 순회 알고리즘

2022. 8. 26. 16:34·알고리즘/풀이 힌트
반응형

재귀 함수를 이용하는 트리 순회는 전위 순회, 중위 순회, 후위 순회가 있다. 

 

전위 순회

루트 노드를 방문하고, 왼쪽 서브 트리를 전위 순회한 뒤 오른쪽 서브 트리를 전위 순회하는 방식이다. 

        1
       / \
      /   \
     2     3
   /  \   /  \
  4    5 6    7

트리가 있다면 

1. 루트 노드 [ 1 ] 을 방문한다. 

2. [ 2 ]를 방문한다. 

3. [ 2 ]의 왼쪽 서브 트리로 이동한다. 

4. [ 4 ]를 방문한다. 

5. [ 4 ]의 왼쪽, 오른쪽 서브 트리가 없으므로 올라간다. 

6. [ 2 ]의 오른쪽 서브 트리로 이동한다. 

 

...

 

방식으로 [ 1, 2, 4, 5, 3, 6, 7 ] 순서대로 순회한다. 

preorder(tree) {
    방문(tree.root);
    
    preorder(tree.left);
    preorder(tree.right);
}

으로 표현할 수 있다. 

 

중위 순회

왼쪽 서브 트리를 먼저 중위 순회하고, 노드를 방문한 뒤 오른쪽 서브 트리를 중위 순회하는 방식이다. 

        1
       / \
      /   \
     2     3
   /  \   /  \
  4    5 6    7

트리가 있다면

1. [ 1 ]의 왼쪽 서브 트리로 이동한다. 

2. [ 2 ]의 왼쪽 서브 트리로 이동한다. 

3. [ 4 ]의 왼쪽 서브 트리가 없으므로 4를 방문한다. 

4. [ 4 ]의 오른쪽 서브 트리가 없으므로 올라간다. 

5. [ 2 ]를 방문한다. 

6. [ 2 ]의 오른쪽 서브 트리로 이동한다. 

7. [ 5 ]의 왼쪽 서브 트리가 없으므로 5를 방문한다. 

8. [ 5 ]의 오른쪽 서브 트리가 없으므로 올라간다. 

9. [ 1 ]을 방문한다. 

 

... 

 

방식으로 [ 4, 2, 5, 1, 3, 6, 7 ] 순서대로 순회한다. 

inorder(tree) {
    inorder(tree.left);
    방문(tree.root);
    inorder(tree.right);
}

으로 표현할 수 있다. 

 

후위 순회

왼쪽 서브 트리를 후위 순회한 뒤 오른쪽 서브 트리를 후위 순회하고 노드를 방문하는 방식이다. 

        1
       / \
      /   \
     2     3
   /  \   /  \
  4    5 6    7

1. [ 1 ]의 왼쪽 서브 트리로 이동한다.

2. [ 2 ]의 왼쪽 서브 트리로 이동한다. 

3. [ 4 ]는 왼쪽, 오른쪽 서브 트리가 없으므로 [ 4 ]를 방문한다. 

4. 올라간다.

5. [ 2 ]의 오른쪽 서브 트리로 이동한다. 

6. [ 5 ]는 왼쪽, 오른쪽 서브 트리가 없으므로 [ 5 ]를 방문한다. 

7. [ 2 ]를 방문한다. 

8. 올라간다.

9. [ 1 ]의 오른쪽 서브 트리로 이동한다. 

 

... 

 

방식으로 [ 4, 5, 2, 6, 7, 3, 1 ] 순서대로 순회한다. 

postorder(tree) {
  postorder(tree.left);
  postorder(tree.right);
  방문(tree.root);
}

으로 표현할 수 있다. 

 

 

반응형
저작자표시 비영리 변경금지

'알고리즘 > 풀이 힌트' 카테고리의 다른 글

[알고리즘] 최소 신장 트리 ( Kruskal ) - JavaScript  (2) 2022.08.29
[알고리즘] 재귀 함수를 이용한 순열, 조합  (1) 2022.08.27
[알고리즘] 재귀함수 - JavaScript  (0) 2022.08.25
[알고리즘] 소수 구하기 - JavaScript  (0) 2022.08.23
[알고리즘] 이진 탐색 - JavaScript  (0) 2022.08.17
'알고리즘/풀이 힌트' 카테고리의 다른 글
  • [알고리즘] 최소 신장 트리 ( Kruskal ) - JavaScript
  • [알고리즘] 재귀 함수를 이용한 순열, 조합
  • [알고리즘] 재귀함수 - JavaScript
  • [알고리즘] 소수 구하기 - JavaScript
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    Docker
    바질 키우기
    네이버 부스트캠프
    redux
    CSS
    ChatGPT
    javascript
    리얼클래스
    typescript
    다이소
    타입스크립트
    CCNA
    webpack
    리얼학습일기
    식물
    Babel
    자바스크립트
    네트워크
    영어회화
    타일러영어
    next.js
    ReactNative
    알고리즘
    영어독학
    바질
    react
    프로그래머스
    리액트
    덤프
    Node.js
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[알고리즘] 재귀 함수를 이용한 트리 순회 알고리즘
상단으로

티스토리툴바