https://www.acmicpc.net/problem/22856
22856번: 트리 순회
노드가 $N$개인 이진 트리가 있다. 트리를 중위 순회와 유사하게 순회하려고 한다. 이를 유사 중위 순회라고 하자. 순회의 시작은 트리의 루트이고 순회의 끝은 중위 순회할 때 마지막 노드이다.
www.acmicpc.net
- 중위순회를 하면서 거쳐갔던 노드들을 카운트하는 문제
- 재귀연산을 통해 전위, 중위, 후위 순회를 표현하는 법은 배웠지만, 그 순회를 이용해서 다른 문제를 푸는 문제는 처음이었더라 시간이 좀 걸렸던 문제
- 중위 순회에서 우리가 알 수 있는건, 트리의 가장 왼쪽 노드와 그 노드의 부모노드 그리고 리프노드 값이다!
- 유사 중위 순회에서 대부분의 값들은 다시 자기자신으로 돌아오지만, 리프노드를 호출한 함수는 돌아오지 않는다는 걸 체크
핵심코드
더보기
def inorder(t):
global cnt, ans
if t :
left = inorder(c1[t])
if left :
cnt += 2
if t == leaf_node :
return -1
right = inorder(c2[t])
if right == -1 :
cnt += 1
return -1
elif right :
cnt += 2
return t
else :
return 0
'알고리즘 스터디' 카테고리의 다른 글
백준 1107. 리모컨 - Python (0) | 2023.03.05 |
---|