문제
다음 Python 코드의 출력 결과로 가장 적절한 것은?
Pythonclass Node: def __init__(self, value): self.value = value self.children = [] def tree(li): nodes = [Node(i) for i in li] for i in range(1, len(li)): nodes[(i - 1) // 2].children.append(nodes[i]) return nodes[0] def calc(node, level=0): if node is None: return 0 return (node.value if level % 2 == 1 else 0) + sum(calc(n, level + 1) for n in node.children) li = [3, 5, 8, 12, 15, 18, 21] root = tree(li) print(calc(root))
① 13 ② 3 ③ 33 ④ 26
정답
1번
해설
정답: 1. calc는 홀수 레벨의 노드 값만 더한다. 루트 3은 레벨 0이라 제외되고, 레벨 1의 값 5와 8이 더해져 13이 출력된다.
오답 풀이
- 1번: 홀수 레벨 값 5와 8의 합이다.
- 2번: 루트 값만 계산한 값이다.
- 3번: 일부 자식 노드까지 잘못 포함한 값이다.
- 4번: 짝수 레벨 또는 전체 합 일부를 혼동한 값이다.
보충 개념
완전 이진트리 배열 표현에서 인덱스 i의 부모는 (i-1)//2이다. 재귀 함수의 level 값이 어떤 노드를 포함할지 결정한다.