성장기록지
백준 9934 완전 이진 트리 (python) 본문
문제
풀이
트리를 순회하며 각 노드의 번호를 구하는 문제이다.
트리는 중위순회를 진행하라고 설명에서 작성되어 있다.
(중위순회란? LEFT - ROOT - RIGHT 순서대로 순회하는것.)
재귀를 통하여 문제를 풀고자 하였다.
한 노드의 왼쪽 자식노드 인덱스는 2^n+1 이고 오른쪽은 2^n+2 이기 때문이다.
따라서 아래와 같이 재귀함수를 구성하였다.
def back(n):
if n>=max_count:
return
back(2*n + 1)
ans[n] = lst.popleft()
back(2*n + 2)
루트 노드들은 먼저 입력받은 숫자에서 가장 왼쪽 값을 빼서 넣어주며 정답 리스트인 ans를 완성하였다.
이후에 for문을 통해 각 레벨마다 값을 출력해주며 마무리하였다.
코드
from collections import deque
n=int(input())
max_count= 2**n-1
lst = list(map(int,input().split()))
lst = deque(lst)
ans = [-1 for i in range(max_count)]
def back(n):
if n>=max_count:
return
back(2*n + 1)
ans[n] = lst.popleft()
back(2*n + 2)
back(0)
for i in range(n):
for j in range(2**i-1,2**(i+1)-1):
print(ans[j], end=' ')
print()
'알고리즘' 카테고리의 다른 글
백준) 2636 치즈 문제풀이 및 set() 활용 (2) | 2024.06.03 |
---|---|
백준 1213) 팰린드롬 만들기 정리 (python) (3) | 2024.05.31 |
클린 구현 프로젝트 2) 백준 16926 배열 돌리기 (1) | 2024.05.24 |
깔끔하게 구현하기 프로젝트) 백준 17413 단어 뒤집기 2 (0) | 2024.05.13 |
냅색에 대한 정리와 문제풀이-12865 평범한 배낭 (1) | 2024.04.08 |