[BOJ알고리즘, C++]#9934_완전 이진 트리, 트리 순회, 순회 -> 트리 구성 유형

2024. 3. 14. 20:25· 문제 풀이/BOJ 문제 풀이
목차
  1. #1. 문제
  2. #2. 풀이
  3. 1. 완전 이진트리
  4. 2. 트리의 중위 순회
  5. 3. 주어진 중위 순회를 전위 순회!
  6. #3. 코드

 

#1. 문제

 

 

9934번: 완전 이진 트리

상근이는 슬로베니아의 도시 Donji Andrijevci를 여행하고 있다. 이 도시의 도로는 깊이가 K인 완전 이진 트리를 이루고 있다. 깊이가 K인 완전 이진 트리는 총 2K-1개의 노드로 이루어져 있다. (아래

www.acmicpc.net

 


 

#2. 풀이

 

1. 완전 이진트리

 

[자료구조]#5_트리

[자료구조]#5_트리 트리 자료구조에 대해 알아보겠습니다. Overview 개념 이진트리 순회 이진 탐색 트리 균형 이진트리 AVL 트리 레드-블랙 트리 Map, Set 힙 #0. 개념 1. 트리? [정의] : 트리는 1:n 관계의

webddevys.tistory.com

 

완전 이진트리는 이진트리의 한 종류로, 마지막 레벨을 제외한 모든 레벨에 노드가 꽉 차있으며, 마지막 레벨의 경우 왼쪽부터, 오른쪽 순서로 노드가 채워지는 특징이 있습니다. 

 

2. 트리의 중위 순회

 

[자료구조]#5_트리

[자료구조]#5_트리 트리 자료구조에 대해 알아보겠습니다. Overview 개념 이진트리 순회 이진 탐색 트리 균형 이진트리 AVL 트리 레드-블랙 트리 Map, Set 힙 #0. 개념 1. 트리? [정의] : 트리는 1:n 관계의

webddevys.tistory.com

struct Node {
    int data;
    Node* left;
    Node* right;
};

void inorderTraversal(Node* root) {
    if (root == nullptr) {
        return;
    }
    inorderTraversal(root->left);   // 왼쪽 서브 트리 순회 재귀
    cout << root->data << " ";      // 현재 노드 값 출력
    inorderTraversal(root->right);  // 오른쪽 서브 트리 순회 재귀
}
트리의 중위 순회는 트리를 순회하는 방법 중 하나로, 왼쪽 자식 노드, 현재 노드, 그리고 오른쪽 자식 노드 순서로 트리를 순회하는 방법입니다. 트리의 중위 순회를 구현하기 위해 먼저, 왼쪽 자식 노드에 대해 중위 순회를 재귀적으로 수행, 현재 노드 출력 혹은 저장, 그리고 오른쪽 자식 노드에 대해 중위 순회를 재귀적으로 수행합니다. 

 

3. 주어진 중위 순회를 전위 순회!

 

중위 순회 : 1 - [6] - 4 - [3] - 5 - [2] - 7

1. 루트 노드 : 3
2. 왼쪽 자식 노드 : 6
3. 오른쪽 자식 노드 : 2

 

  1. 먼저, 중위 순회의 루트 노드는 가운데 위치합니다. 그리고, 루트 노드의 왼쪽 자식 노드는 또 루트 노드를 기준으로 왼쪽에 위치한 부분 배열의 가운데에 위치하며, 오른쪽 자식 노드는 반대로 오른쪽 부분 배열의 가운데에 위치합니다. 
  2. 주어진 중위 순회를 통해 부모 노드 -> 왼쪽 자식 노드 -> 오른쪽 자식 노드 순서로 전위 순회하며 DFS를 재귀적으로 수행하고, 레벨 별 노드들을 왼쪽 -> 오른쪽 순서로 저장합니다.

 


 

#3. 코드

 

#include <iostream>
#include <vector>
#include <map>
using namespace std;

#define MAX 1025

int K, InOrder[MAX];
vector<int> tree[MAX];

void MakeTree(int level, int start, int end)
{
    if (start > end)
        return;

    int mid = (start + end) / 2;
    int root = InOrder[mid];

    tree[level].push_back(root);

    // #1. 왼쪽 서브트리
    MakeTree(level + 1, start, mid - 1);
    // #2. 오른쪽 서브트리
    MakeTree(level + 1, mid + 1, end);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin >> K;

    int n = (1 << K) - 1;
    for (int i = 0; i < n; ++i)
    {
        cin >> InOrder[i];
    }

    // 재귀 호출, 중위 순회를 통해 완전 이진 트리 구성
    MakeTree(0, 0, n - 1);

    for (int i = 0; i < K; ++i)
    {
        for (int j = 0; j < tree[i].size(); ++j)
        {
            cout << tree[i][j] << ' ';
        }
        cout << '\n';
    }

    return 0;
}

 


 

 

 

 

저작자표시

'문제 풀이 > BOJ 문제 풀이' 카테고리의 다른 글

[BOJ알고리즘, C++]#1987_알파벳, 그래프, DFS, 백트래킹  (0) 2024.03.14
[BOJ알고리즘, C++]#4963_섬의 개수, 그래프, DFS, 미로 탐색 유형  (0) 2024.03.14
[BOJ알고리즘, C++]#11438_LCA 2, Binary Lifting  (0) 2024.03.13
[BOJ알고리즘, C++]#11437_LCA  (0) 2024.03.13
[BOJ알고리즘, C++]#3584_가장 가까운 공통 조상, 트리, LCA  (0) 2024.03.12
  1. #1. 문제
  2. #2. 풀이
  3. 1. 완전 이진트리
  4. 2. 트리의 중위 순회
  5. 3. 주어진 중위 순회를 전위 순회!
  6. #3. 코드
'문제 풀이/BOJ 문제 풀이' 카테고리의 다른 글
  • [BOJ알고리즘, C++]#1987_알파벳, 그래프, DFS, 백트래킹
  • [BOJ알고리즘, C++]#4963_섬의 개수, 그래프, DFS, 미로 탐색 유형
  • [BOJ알고리즘, C++]#11438_LCA 2, Binary Lifting
  • [BOJ알고리즘, C++]#11437_LCA
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • 우선순위 큐
  • stl
  • 기술 질문
  • 트리
  • C++
  • 최단 경로
  • 디자인 패턴
  • 개발
  • dfs
  • 그래프
  • 알고리즘
  • set
  • BOJ
  • Effective C++
  • unreal
  • Unreal Blueprint
  • DP
  • programmers
  • BFS
  • 정렬

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[BOJ알고리즘, C++]#9934_완전 이진 트리, 트리 순회, 순회 -> 트리 구성 유형
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.