일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Django란
- 시간복잡도
- 알고리즘 공부방법
- Django의 편의성
- EOF
- getline
- string 함수
- 연결요소
- Django Nodejs 차이점
- c++
- 프레임워크와 라이브러리의 차이
- 표준 입출력
- 장고란
- 백준
- 엑셀
- double ended queue
- 입/출력
- UI한글변경
- iOS14
- 구조체와 클래스의 공통점 및 차이점
- vscode
- 매크로
- 입출력 패턴
- 자료구조
- k-eta
- 2557
- correlation coefficient
- 이분그래프
- scanf
- string 메소드
- Today
- Total
Storage Gonie
챕터7-2. 트리 | 순회방법(전위, 중위, 후위) 본문
트리의 순회(Tree Traversal)
- 트리도 그래프이기 때문에 DFS와 BFS 방식 모두 가능하다.
- 그런데 트리에서만 가능한 아래의 3가지 방법이 있다.(각각의 차이는 루트 노드의 방문을 언제 하냐의 차이)
- 이진트리에서는 아래의 3가지 방법이 모두 가능한데, 자식이 여러개인 트리에서는 '프리오더'와 '포스트오더'만 가능하다.
그 이유는 자식이 여러개인 트리의 경우, '인오더 방식'에서 출력이 어느 부분에 위치해야할지 가늠할 수 없기 때문이다.
<이진트리> <자식이 여러개인 트리>
프리오더 루트 L R 루트 children
인오더 L 루트 R
포스트오더 L R 루트 루트 children
# Pre-order(전위순회)
* 그래프의 DFS와 순서가 같음.
1) 루트노드 방문
2) 왼쪽 자식 노드를 루트로 하는 서브 트리를 프리오더(재귀)
3) 오른쪽 자식 노드를 루트로 하는 서브 트리를 프리오더(재귀)
# In-order(중위순회)
* Binary Search Tree에서 Delete를 구현할 때 인오더를 주로 사용함.
1) 왼쪽 자식 노드를 루트로 하는 서브 트리를 인오더(재귀)
2) 루트노드 방문
3) 오른쪽 자식 노드를 루트로 하는 서브 트리를 인오더(재귀)
# Post-order(후위순회)
* 트리 관련 다이나믹 문제에서 자식이 모두 처리된 다음에 부모노드를 처리하는 방식으로 자주 쓰임
1) 왼쪽 자식 노드를 루트로 하는 서브 트리를 포스트오더(재귀)
2) 오른쪽 자식 노드를 루트로 하는 서브 트리를 포스트오더(재귀)
3) 루트노드 방문
그림으로 보는 위 3가지 방식의 예시1
# Pre-order(전위순회)
# In-order(중위순회)
# Post-order(후위순회)
그림으로 보는 위 3가지 방식의 예시2
# Pre-order(전위순회)
# In-order(중위순회)
# Post-order(후위순회)
'알고리즘 > 알고리즘 기초(코드플러스)' 카테고리의 다른 글
챕터7-3. 트리 | 문제풀이 (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 |