[JAVA] ⚙️ 자료구조 : Tree & Binary Search Tree 🌲 | 트리 순회 | 간단 정리 및 비교 💬

2025. 8. 21. 20:01·✏️공부/💡JAVA
728x90
반응형

Tree & Binary Search Tree 🌲 

트리 순회(전•중•후위 순회), 이진트리 


Tree

🌳 트리(Tree)

  • 계층적(Hierarchical) 자료 구조
  • 루트(root) 노드에서 시작해서 여러 개의 자식(child) 으로 뻗어나감
  • 각 노드는 0개 이상의 자식을 가질 수 있음
  • 사이클(순환)이 없음

📌 트리의 기본 용어

  • Root: 최상위 노드
  • Leaf(리프): 자식이 없는 노드
  • Depth(깊이): 루트에서 특정 노드까지의 거리
  • Height(높이): 트리 전체의 깊이 (가장 깊은 리프까지)

🌲 트리 순회 4가지

DFS 기반 3가지 + BFS 1가지

방법 설명  순서 예시 (이진 트리 기준)
전위 순회 (Preorder) 루트 → 왼쪽 → 오른쪽 Root → Left → Right
중위 순회 (Inorder) 왼쪽 → 루트 → 오른쪽 Left → Root → Right
후위 순회 (Postorder) 왼쪽 → 오른쪽 → 루트 Left → Right → Root
레벨 순회 (Level-order, BFS) 루트부터 레벨별로 탐색 위에서 아래, 왼쪽에서 오른쪽

 


📌 예시 트리

        A
       / \
      B   C
     / \   \
    D   E   F

1️⃣ Preorder (전위 순회)

  • A → B → D → E → C → F

2️⃣ Inorder (중위 순회)

  • D → B → E → A → C → F

3️⃣ Postorder (후위 순회)

  • D → E → B → F → C → A

4️⃣ Level-order (레벨 순회, BFS)

  • A → B → C → D → E → F

✅ 정리

순회 방식 방문 순서 특징  활용
전위 Preorder Root → Left → Right 루트를 가장 먼저 방문 트리 구조 복사, 디렉토리 구조 출력
중위 Inorder Left → Root → Right 왼쪽-루트-오른쪽 순서 이진 탐색 트리(BST)에서 정렬된 결과
후위 Postorder Left → Right → Root 루트를 가장 마지막에 방문 자식 노드 먼저 처리 후 부모 (삭제 연산)
레벨 Level-order (BFS) 층별 순서 큐를 이용, 층별 탐색 최단 거리 탐색, 네트워크 탐색

 

 

 


Binary Tree / Binary Search Tree

🌳 Binary Tree (이진 트리)

  • 각 노드가 최대 2개의 자식(왼쪽, 오른쪽)을 가질 수 있는 트리 구조
  • 종류:
    1. 정이진 트리(Full Binary Tree)
      → 모든 노드가 0개 또는 2개의 자식을 가짐
    2. 완전 이진 트리(Complete Binary Tree)
      → 마지막 레벨을 제외하고 꽉 차 있으며, 마지막 레벨은 왼쪽부터 채워짐 (힙에서 사용)
    3. 포화 이진 트리(Perfect Binary Tree)
      → 모든 레벨이 꽉 찬 트리
    4. 이진 탐색 트리(BST)
      → 왼쪽 < 부모 < 오른쪽 규칙을 따르는 트리

📌 Binary Search Tree (BST) 규칙

  1. 왼쪽 서브트리에 있는 모든 노드 값 < 부모 노드 값
  2. 오른쪽 서브트리에 있는 모든 노드 값 > 부모 노드 값
  3. 모든 서브트리도 BST 여야 함
  4. 같은 값을 가지는 노드는 일반적으로 허용하지 않음 (혹은 오른쪽에만 허용)

📌 예시

일반 이진 트리 (Binary Tree)

        A
       / \
      B   C
     / \
    D   E

✅ 단순히 2개의 자식까지만 허용하는 트리


이진 탐색 트리 (Binary Search Tree)

        8
       / \
      3   10
     / \     \
    1   6     14
       / \    /
      4   7  13
  • 8의 왼쪽(3,1,6,4,7)은 모두 8보다 작음
  • 8의 오른쪽(10,14,13)은 모두 8보다 큼
  • 6 기준: 왼쪽(4), 오른쪽(7) → 규칙 유지

📊 장점과 활용

특징 설명
탐색(Search) 평균 O(log n) → 정렬된 배열보다 빠르게 탐색 가능
삽입/삭제 평균 O(log n), 규칙에 따라 왼쪽/오른쪽으로 분기
단점 한쪽으로 치우치면 O(n) (연결리스트처럼 됨) → 이를 방지하려고 균형 BST (AVL, Red-Black Tree) 사용

✅ 정리

  • Binary Tree = 최대 2개의 자식만 가지는 트리
  • BST = Binary Tree의 특수한 형태 (왼쪽 < 부모 < 오른쪽 규칙)

728x90
반응형

'✏️공부 > 💡JAVA' 카테고리의 다른 글

[JAVA] Lombok & Validation 정리 | 필수 어노테이션 가이드 📖 | @Getter / @Setter | @NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor  (0) 2025.09.21
[JAVA] ⚙️ 자료구조 : Heap | 간단 정리 및 삽입•삭제 과정 💬  (5) 2025.08.21
[JAVA] ⚙️ 자료 구조 : Stack / Queue / Deque | 간단 비교 및 정리 💬  (0) 2025.08.21
[JAVA | 테스트] TDD (Test-Driven Development) | 자동테스트, red•green•blue 단계  (4) 2025.08.11
[JAVA] Java Stream | mapToInt() 활용한 연산, finFirst(), isPresent(), orElseThrow(), Optional<>  (4) 2025.08.07
'✏️공부/💡JAVA' 카테고리의 다른 글
  • [JAVA] Lombok & Validation 정리 | 필수 어노테이션 가이드 📖 | @Getter / @Setter | @NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor
  • [JAVA] ⚙️ 자료구조 : Heap | 간단 정리 및 삽입•삭제 과정 💬
  • [JAVA] ⚙️ 자료 구조 : Stack / Queue / Deque | 간단 비교 및 정리 💬
  • [JAVA | 테스트] TDD (Test-Driven Development) | 자동테스트, red•green•blue 단계
망꼬누나
망꼬누나
공부한 내용을 정리하는 공간입니다.
  • 망꼬누나
    망꼬누나의 개발 공부
    망꼬누나
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • ℹ️ 정보 및 실습 (19)
        • ☑️ Git & GitHub (8)
        • ☑️ 프로젝트 (6)
        • ☑️ 회고 및 후기 (5)
      • 🛠 CS (1)
      • 💻코딩 (88)
        • 💡Baekjoon (17)
        • 💡Programmers (71)
      • ✏️공부 (48)
        • 💡OS (1)
        • 💡Network (6)
        • 💡SpringBoot (9)
        • 💡JAVA (21)
        • 💡SQL (1)
        • 💡DB (2)
        • ☁️ Cloud (4)
        • 💡알고리즘 (4)
      • 📌 자격증 (6)
        • 📝정보처리기사 (3)
        • 📝SQLD (3)
  • 블로그 메뉴

    • 홈
    • github
  • 나의 GitHub Contribution 그래프
    Loading data ...
  • 인기 글

  • 태그

    AWS
    S3
    Stream
    프로그래머스
    데브코스
    네트워크
    동시성제어
    Java
    Set
    백엔드
    github
    baekjoon
    코딩테스트
    map
    알고리즘
    프로그래머스 #JAVA
    자료구조
    자바
    GIT
    트랜잭션
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.5
망꼬누나
[JAVA] ⚙️ 자료구조 : Tree & Binary Search Tree 🌲 | 트리 순회 | 간단 정리 및 비교 💬
상단으로

티스토리툴바