트리(Tree)
노드와 에지로 연결된 그래프의 특수한 형태
- 순환 구조를 지니고 있지 않고, 1개의 루트 노드가 존재한다.
- 루트 노드를 제외한 노드는 단 1개의 부모 노드를 갖는다.
- 트리의 부분 트리 역시 트리의 모든 특징을 따른다.
예제1
https://www.acmicpc.net/problem/11725
import java.util.*;
import java.io.*;
public class Main {
static int N;
static boolean[] visited;
static ArrayList<Integer> tree[];
static int answer[];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
visited = new boolean[N + 1];
tree = new ArrayList[N + 1];
answer = new int[N + 1];
for (int i = 0; i < tree.length; i++) {
tree[i] = new ArrayList<>();
}
for (int i = 1; i < N; i++) {
int n1 = sc.nextInt();
int n2 = sc.nextInt();
tree[n1].add(n2);
tree[n2].add(n1);
}
DFS(1);
for (int i = 2; i <= N; i++) {
System.out.println(answer[i]);
}
}
private static void DFS(int number) {
visited[number] = true;
for (int i : tree[number]) {
if (!visited[i]) {
answer[i] = number;
DFS(i);
}
}
}
}
예제2
https://www.acmicpc.net/problem/1068
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
static ArrayList<Integer>[] graph;
static boolean visited[];
static int delete;
static int parent[];
static int ans;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk;
int n = Integer.parseInt(br.readLine());
graph = new ArrayList[n + 1];
visited = new boolean[n + 1];
parent = new int[n + 1];
for (int i = 0; i < n; i++)
graph[i] = new ArrayList<>();
int root = -1;
stk = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
int p = Integer.parseInt(stk.nextToken());
if (p == -1) {
root = i;
} else {
graph[i].add(p);
graph[p].add(i);
}
}
delete = Integer.parseInt(br.readLine());
if (delete == root) {
System.out.println(0);
return;
} else dfs(root);
System.out.println(ans);
}
static void dfs(int v) {
visited[v] = true;
int nodes = 0;
for (int cur : graph[v]) {
if (cur != delete && !visited[cur]) {
nodes++;
dfs(cur);
}
}
if (nodes == 0) {
ans++;
}
}
}
'🤷♂️Algorithm' 카테고리의 다른 글
[트리] 트라이 (1) | 2024.05.15 |
---|---|
[정수론] 유클리드 호제법 (0) | 2024.04.11 |
[정수론] 소수 구하기 (0) | 2024.04.03 |
[백준 11047] 카드 정렬하기 (그리디) (0) | 2024.03.30 |
[백준 2343] 기타레슨 (이진 탐색) (0) | 2024.03.27 |