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