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

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)
  • 태그

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

티스토리툴바