[Java] 트리 순회 알고리즘

2023. 1. 20. 15:32·Java

 

트리의 순회 방법에는 3가지가 있다.

 

  • 전위 순회
  • 중위 순회
  • 후위 순회

 

한 가지씩 자세히 알아보자.


 

 

1. 전위 순회( preorder )

 

 

전위 순회

 

전위 순회란 루트 노드를 가장 먼저 방문하고, 왼쪽과 오른쪽 서브트리를 방문하는 순회 방법이다.

 

 

 

 

 

 

 

 

 

트리 예제

 

다음과 같은 예제에서 전위 순회 방법을 사용한다면 방문 순서가 어떻게 될까?

루트노드를 가장 먼저 방문해야 하므로 처음엔 0번을 방문할 것이고, 그 다음엔 왼쪽과 오른쪽의 서브트리가 남는다.

왼쪽을 먼저 방문하면, 왼쪽 서브트리에는 또 루트노드인 1이 있다. 따라서 루트노드인 1을 방문하고, 왼쪽 노드와 오른쪽 자식노드인 3, 4를 방문한다.

 

 

 

 

 

그렇게 하면 방문 순서는 다음과 같다.

전위 순회 결과

 

 


 

2. 중위 순회( Inorder )

 

중위 순회

중위 순회는 루트 노드를 중간에 방문하기에 중위 순회라고 생각하면 쉽다. 왼쪽 서브트리를 먼저 방문하고, 다음으로 루트 노드, 마지막으로 오른쪽 서브 트리를 방문하는 순회 방법이다.

 

 

 

 

트리 예제

이 예제에서 중위 순회를 해 보자. 가장 처음으로 왼쪽을 방문하므로, 왼쪽 서브트리를 따로 보자. 왼쪽 서브트리를 따로 보면 루트노드인 1이 있고 그 아래에 왼쪽 자식노드인 3과 오른쪽 자식노드인 4가 있다. 왼쪽 우선 방문이므로 3을 먼저 방문하고, 다음으로 루트노드인 1을, 마지막으로 오른쪽인 4를 방문한다. 이렇게 하면 왼쪽 서브트리의 방문이 끝났다.

왼쪽이 끝났으면 루트노드인 0을 이어서 방문하고, 남은 오른쪽 서브트리를 방문한다.

오른쪽 서브트리에는 왼쪽노드는 없으므로 루트노드인 2를 방문하고, 5를 방문한다.

 

 

 

 

이렇게 하면 방문 순서는 아래와 같다.

중위 순회 결과

 

 


3. 후위 순회( postorder )

후위 순회

 

후위 순회란 루트 노드를 가장 마지막에 방문하는 순회 방법이다. 왼쪽을 먼저 방문하고 나서 오른쪽을 방문하고, 루트를 방문하면 된다.

 

 

 

 

트리 예제

같은 예제에서 후위 순회는 어떻게 적용될까? 우선 왼쪽 서브트리를 방문한다. 그 다음 왼쪽 서브트리 내에서 방문을 진행하는데, 왼쪽 - 오른쪽 - 루트 순서이니 방문 순서는 3 - 4 - 1 이 된다. 

 

 

 

 

 

 

최종적으로 후위 순회의 방문 순서는 다음과 같다.

후위 순회 결과

 

반응형

'Java' 카테고리의 다른 글

Java 상속(Inheritance) 이해하기 - 업캐스팅, 다운캐스팅  (0) 2025.04.14
[Java] isEmpty()와 isBlank()의 차이  (0) 2024.01.29
[Java] 그래프 너비 우선 탐색 알고리즘 Breadth-First Search  (0) 2023.01.20
'Java' 카테고리의 다른 글
  • Java 상속(Inheritance) 이해하기 - 업캐스팅, 다운캐스팅
  • [Java] isEmpty()와 isBlank()의 차이
  • [Java] 그래프 너비 우선 탐색 알고리즘 Breadth-First Search
오은이
오은이
  • 오은이
    오은이 하우스
    오은이
  • 전체
    오늘
    어제
    • 분류 전체보기 (85)
      • 일기 (2)
      • Python (1)
      • Java (4)
      • CS (2)
      • 코딩테스트 (26)
        • 백준 (25)
        • 프로그래머스 (1)
      • 웹 개발 (18)
        • Spring (7)
        • JavaScript (3)
        • WebSquare (5)
        • React (3)
      • DB (5)
        • MySQL (4)
        • Oracle (1)
      • 서버&인프라 (18)
        • Server (5)
        • Cloud (12)
        • Linux (1)
      • 자격증 (9)
        • 정보처리기사 (2)
        • AICE (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    tomcat
    클라우드 배포
    react
    websquare
    오블완
    docker
    dockerspring
    AICE Associate
    리액트
    cloud DB
    알고리즘
    MySQL
    클라우드
    EC2
    자바
    db
    docker배포
    Spring
    티스토리챌린지
    AI
    머신러닝
    백준
    백준자바
    Java
    Apache
    AICE
    Associate
    웹스퀘어
    SpringBoot
    톰캣
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
오은이
[Java] 트리 순회 알고리즘
상단으로

티스토리툴바