일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Bottom Up
- 동적계획법
- n진법게임
- 프로그래머스
- DynamicProgramming
- 연결요소
- 웹개발
- 완전이진트리
- dfs
- BFS
- 9093
- 바인딩
- 자바
- 전공자따라잡기
- 링킹
- JAVA_HOME
- 순회
- 포스트오더
- 이진트리
- 알고리즘
- 11724
- 1707
- 도커
- 백준
- 포화이진트리
- 인오더
- 이분그래프
- Java
- 피보나치
- 그래프
- Today
- Total
물음표 살인마
트리 자료구조 이해하기 본문
트리란?
자료구조의 일종
사이클이 없는 연결 그래프
모든 정점이 연결되어 있어야한다.
정점의 개수: V
간선의 개수: V-1
정점이 n개, 간선이 n개인 경우 -> 사이클이 딱 "1개" 있는 그래프
정점이 n개, 간선이 n-1개인 경우 -> 사이클이 없는 "트리"
이진트리?
자식을 최대 2개만 가지고 있는 트리
포화 이진트리?
리프 노드를 제외한 노드의 자식의 수: 2
리프 노드의 자식의 수: 0
모든 리프 노드의 깊이가 같아야 함.
높이가 h인 트리 노드의 개수: 2^h - 1
완전 이진트리?
리프 노드를 제외한 노드의 자식의 수: 2
리프 노드의 자식의 수: 0
마지막 레벨에는 노드가 일부는 없을 수도 있음.
오른쪽에서부터 몇개가 사라진 형태
트리의 표현
1. 그래프와 같은 방식으로 저장
2. 부모만 저장(루트의 경우 -1이나 0으로 저장)
부모만 저장하는 방식의 장단점
장점: 부모 찾기 쉬움 O(1)
단점: 자식 찾는거 오래 걸림 O(n)
완전 이진트리의 경우 배열로 표현 가능
부모의 노드가 x인 경우 자식 노드는 2*x, 2x + 1 로 표현 가능
이진트리의 경우 구조체나 클래스로 표현 가능.
트리의 순회
1. dfs의 경우
- 프리오더
: 노드방문 -> 왼쪽 자식 노드를 루트로 하는 서브 트리 프리오더 -> 오른쪽 자식 노드를 루트로 하는 서브트리 프리오더
- 인오더
: 왼쪽 자식 노드를 루트로 하는 서브 트리 인오더 -> 노드방문 -> 오른쪽 자식 노드를 루트로 하는 서브트리 인오더
: bst(binary search tree)에서 삭제 구현할때 "만" 쓰인다.
:이진트리에서만 사용 가능
- 포스트오더
:왼쪽 자식 노드를 루트로 하는 서브 트리 포스트오더 -> 오른쪽 자식 노드를 루트로 하는 서브트리 포스트오더 -> 노드방문
: 제일 많이 쓰이는 순회 방식
: 자식의 정보를 이용해 현재 노드의 정보를 계산할때 거의 포스트 오더가 쓰임
즉, 부모의 값을 이용해 자식의 값을 구하는 경우 -> 프리오더
자식의 값을 이용해 부모의 값을 구하는 경우 -> 포스트오더
bst에서 삭제 구현시 -> 인오더
'개발지식 > Algorithm' 카테고리의 다른 글
프로그래머스 N진수 게임으로 알아보는 자바 진법 변환 (0) | 2023.04.19 |
---|---|
[백준1707] 문제를 통해 이분 그래프 이해하기 (0) | 2023.01.10 |
[백준11724] 연결 요소 - Connected Component란? (0) | 2023.01.10 |
[백준1260] DFS와 BFS 문제를 통해 그래프 탐색 이해하기 (0) | 2023.01.10 |
[백준13023] ABCDE - 그래프 표현 연습 (0) | 2023.01.07 |