728x90
코딩테스트에서의 Tree 문제 분류
1) 그래프로 푸는 Tree
- 트리도 특수한 그래프 형태의 하나이기 때문에 노드, 간선 정보가 주어질 수 있다.
- 이 경우, 인접리스트 형태로 트리를 표현하고, 그에 맞는 그래프 처리 (ex. DFS/BFS) 풀이
2) Tree 만을 위한 문제
- 보통 1차원 배열로 트리를 표현한다.
- 이진트리, 세그먼트 트리, LCA(최소 공통 조상)
1. 트리 (Tree)
(1) 트리 Tree : 노드-에지로 연결된 그래프의 특수한 형태
(2) 특징
- 사이클 X, 루트 노드 1개
- 루트노드 제외한 모든 노드들은 단 1개의 부모 노드만 갖는다.
- 트리의 부분 트리(=서브트리) 역시 같은 특징을 따른다.
(3) 트리의 구성 요소
2. 트라이 (Trie)
(1) 트라이 (Trie) ; 문자열 검색 빠르게 실행 가능하도록 설계한 트리 형태의 자료구조
- 일반적으로 단어들을 사전 형태로 생성한 후, 트리의 부모 자식 관계 이용하여 ‘검색 수행’
(2) 트라이 특징
- N진 트리 : 문자 종류에 따라 N이 결정됨 (ex. 알파벳 26개 문자 구성 → 26진트리)
- 루트 노드는 항상 공백 상태 유지
3. 이진 트리 (Binary Tree)
(1) 이진 트리 : 각 노드의 최대 차수 (자식노드 개수) 2 이하로 구성된 트리
(2) 이진 트리 종류
- 편향 이진 트리 : 노드들이 한쪽으로 편향돼 생성된 이진 트리
- 포화 이진 트리 : 단말 노드 꽉찬 이진 트리
- 완전 이진 트리 : 단말 노드가 덜 꽉 찬 이진 트리 (마지막 레벨 단말노드는 왼쪽부터 채워짐)
→ 일반적으로 완전 이진 트리 형태가 多
(3) 이진 트리의 순차표현 : 1차원 배열로 표현
🎈[배열의 인덱스 연산] 현재 idx기준으로 대상 노드 위치 idx 찾기
1) 루트 노드 찾기
target = idx = 1
2) 부모 노드 찾기
//단, 현재 노드가 루트 노드 아닌 경우만 부모 노드 찾을 수 있음 target = idx / 2
3) 왼쪽 자식 노드 찾기
if(idx*2 <= N) { //전체 노드 개수 N 범위 벗어나지 않는 한도 내에서 target = idx * 2; }
4) 오른쪽 자식 노드 찾기
if(idx*2 + 1 <= N) { //전체 노드 개수 N 범위 벗어나지 않는 한도 내에서 target = idx * 2 + 1; }
(4) 이진 트리의 연결 리스트 표현
- 각 노드를 3개의 필드 left, data, right(왼쪽 자식, 본인, 오른쪽 자식 ) 형태로 구성
💡 이진트리 (Binary Tree) vs 이진탐색 트리(Binary Search Tree) 차이점
1) 이진트리 : 노드의 최대 차수가 2 인 트리 의미
2) 이진탐색트리
- 이진트리
- 각 노드에 중복되지 않은 키 (key) 존재
- 루트 노드 왼쪽의 서브트리는 해당 노드의 키보다 작은 키를 갖는 노드들로 구성
- 루트 노드 오른쪽의 서브트리는 해당 노드의 키보다 큰 키를 갖는 노드들로 구성
- 좌우 서브 트리도 모두 이진 탐색 트리여야 한다.
💡 이진탐색 트리의 탐색
- 루트 노드 키와 찾고자 하는 값 비교 (발견 시 탐색 종료)
- 찾고자 하는 값이 루트 노드 키보다 작다면 왼쪽 서브트리로 탐색 진행
- 찾고자 하는 값이 루트 노드 키보다 크다면 오른쪽 서브트리로 탐색 진행
728x90
'코딩 테스트 [준비] > [개념] 알고리즘 추가 정리 _ 2024' 카테고리의 다른 글
트리(Tree) | 최소 공통 조상 Lowest Common Ancestor (알고리즘) 정리 (55) | 2024.02.14 |
---|---|
트리(Tree) | 세그먼트 트리 Segment Tree (알고리즘) 정리 (60) | 2024.02.14 |
MST | 최소 비용 신장 트리 (MST) 개념 간략한 정리 (2) | 2024.01.24 |
최단 경로| 다익스트라, 벨만포드, 플로이드 비교 (73) | 2024.01.13 |
DP 알고리즘 | LCS (최장 길이 공통 부분 수열) (74) | 2024.01.11 |