-
[백준] 5639번: 이진검색트리(Python)Algorithm PS👩🏻💻/백준 2023. 8. 11. 12:04
문제링크
https://www.acmicpc.net/problem/5639
5639번: 이진 검색 트리
트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다
www.acmicpc.net
풀이
- 분류: 트리순회 + 이진탐색 느낌?
- 몰라서 풀이를 참고했다 ㅜㅜ 노드 클래스를 만들어서 풀려 하니까 insert, find 등의 함수를 다 구현해야하나 싶었다.
- 참고 풀이를 설명하자면, 전위 순회로 받았기 때문에 처음 입력값인 50이 루트 노드 이다.
- 이진 트리이기 때문에 루트보다 큰 값은 오른쪽에 위치하게끔 인덱스를 설정해준다.
- 그 인덱스를 기준으로 왼쪽 서브트리를 돌리고, 오른쪽 서브트리를 돌리는 것으로 푸는 것.
import sys input = sys.stdin.readline() sys.setrecursionlimit(10**5) pre = [] while True: try: pre.append(int(input())) except: break def postorder(start, end): if start > end: return mid = end + 1 for i in range(start + 1, end + 1): if pre[start] < pre[i]: #루트보다 큰 값 찾아서 mid = i #해당 인덱스를 기준 break postorder(start + 1, mid - 1) #왼쪽 서브트리 postorder(mid, end) #오른쪽 서브트리 print(pre[start]) #노드 출력 postorder(0, len(pre)-1)
'Algorithm PS👩🏻💻 > 백준' 카테고리의 다른 글
[백준] 21278번: 호석이 두마리 치킨(Python, 플로이드워셜) (0) 2024.03.20 [백준] 20056번: 마법사 상어와 파이어볼(구현, Python) (1) 2023.10.08 [백준] 9935번: 문자열 폭발(Python) (0) 2023.08.11 [백준] 1068번: 트리(Python) (2) 2023.08.10 [백준] 7569번: 토마토(그래프이론, Python) (0) 2023.08.04