on
1068. 트리 (Swift, Python)
1068. 트리 (Swift, Python)
// 트리 dfs 탐색
func dfs(_ node: Int ) {
// 현재 node의 자식이 하나도 없을 경우 리프 노드이므로 res 1 증가
if nodes[node].count = = 0 {
res + = 1
return
}
// node의 자식 노드 for문
for i in nodes[node] {
// 자식 노드가 지워야 하는 노드일 경우 dfs를 호출하지 않음
// 지워야 하는 노드가 유일한 자식 노드일 경우에는 현재 node가 리프 노드가 되므로 res 1 증가
if i = = M {
if nodes[node].count = = 1 {
res + = 1
}
continue
}
dfs(i) // 재귀 호출
}
}
var N: Int = 0 // 트리의 노드의 개수
var M: Int = 0 // 지울 노드 번호
var p: [ Int ] = [] // 각 노드의 부모를 담아줄 배열
var root: Int = 0 // 루트 노드(부모 노드가 -1인 노드)
var res: Int = 0 // 리프 노드의 총 개수
if let input = readLine() {
N = Int (input) !
}
var nodes:[[ Int ]] = Array(repeating: [ Int ](), count: N) // [node]의 자식 노드 리스트
if let input = readLine() {
p = input.split(separator: " " ).map { Int ($0) ! }
}
if let input = readLine() {
M = Int (input) !
}
for i in 0. . < N {
if p[i] = = - 1 {
root = i // 루트 노드 설정
continue
}
nodes[p[i]].append(i)
}
// 루트 노드가 지워야 하는 노드일 경우에는 dfs 탐색을 하지 않음
if M ! = root {
dfs(root)
}
from http://one10004.tistory.com/105 by ccl(A) rewrite - 2021-12-02 01:01:07