일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- getline
- 표준 입출력
- k-eta
- vscode
- scanf
- Django Nodejs 차이점
- EOF
- 장고란
- 이분그래프
- c++
- iOS14
- Django란
- 구조체와 클래스의 공통점 및 차이점
- 프레임워크와 라이브러리의 차이
- correlation coefficient
- string 함수
- 자료구조
- 매크로
- 알고리즘 공부방법
- 2557
- 시간복잡도
- UI한글변경
- string 메소드
- 입출력 패턴
- double ended queue
- 엑셀
- Django의 편의성
- 입/출력
- 백준
- 연결요소
- Today
- Total
Storage Gonie
챕터7-3. 트리 | 문제풀이 본문
개념을 적용한 문제풀이
# 이진트리의 프리오더, 인오더, 포스트오더 순서를 출력하는 문제
- https://www.acmicpc.net/problem/1991
- 코드상에서 3가지 방법의 차이는 출력을 언제 하는가의 차이이다.
- 알파벳을 숫자화 해서 A : 0, B : 1, C : 2, ... i의 값으로 사용하고,
2차원 배열로 A[i][0] = 왼쪽 자식 값, A[i][1] = 오른쪽 자식 값을 저장하는 방식으로 트리를 저장하였음.
자식이 없는 경우 -1을 넣어주어 재귀호출이 끝나도록 하였음.
* 이진트리의 순회는 왼쪽 자식과 오른쪽 자식의 값을 구분해 가지고 있는게 출력하기 편함.
# 트리의 부모 찾기
- https://www.acmicpc.net/problem/11725
- DFS, BFS 두 방법 모두 사용이 가능한 해결방법이다.
그 이유는 루트부터 모든 노드를 한번씩 방문하는 과정 중에 이는 간선이 있고 아직 방문하지 않은 경우에만 가능하기 때문에
A->B가 이뤄진 경우 A는 B의 부모라고 할 수 있다.
- 이 문제를 응용하면 각 노드의 depth를 구할 수도 있다.
depth를 구하고 싶으면 parent 값을 넣어주는 부분을 다음과 같이 처리하면 된다. depth[y] = depth[x] + 1
# 트리의 지름
- https://www.acmicpc.net/problem/1167
- 트리의 지름 : 존재하는 모든 경로 중에서 가장 긴 것의 길이
- 문제에서 거리라고 하는 것은 가중치를 의미한다.
- 트리의 지름은 2번의 탐색을 통해 구할 수 있다.(알고리즘임)
1) 임의의 정점을 루트로 설정한뒤, 루트에서 모든 정점까지의 거리를 구한다. 이때, 가장 먼 거리였던 정점을 A라고 한다.
2) A를 루트라고 하고 모든 정점까지의 거리를 구한다. 이 때 구한 가장 먼 거리가 지름이다.
'알고리즘 > 알고리즘 기초(코드플러스)' 카테고리의 다른 글
챕터7-2. 트리 | 순회방법(전위, 중위, 후위) (0) | 2019.05.29 |
---|---|
챕터7-1. 트리 | 개념 및 저장방법 (0) | 2019.05.29 |
챕터6-5. 그래프 | 문제풀이(2) - 플러드필 알고리즘(DFS, BFS 탐색응용) (0) | 2019.05.29 |
챕터6-4. 그래프 | 문제풀이(1) - DFS, BFS 탐색응용 (0) | 2019.05.27 |
챕터6-3. 그래프 | 그래프의 탐색(DFS, BFS) (0) | 2019.05.22 |