[アルゴリズム]白駿5639「バイナリ検索ツリー」解答パイソン
5231 ワード
白駿5639バイナリ検索ツリー
https://www.acmicpc.net/problem/5639
難易度:シルバー1
タイプ:ツリー
与えられたノードがバイナリ探索ツリーを前列順に並べた場合、ノードの問題が後列順に出力される.
基本的にバイナリツリーの問題なので再帰で解決したいと思います.
関数ループ配列を作成することで、一番前の数をルートノードで除算し、後ろの配列の中でルートより小さい数を左で除算し、残りは右の3つの部分で除算します.
分割された部分を後方にループさせるために,まず左側の配列を再帰に渡し,次に右側の配列を再帰に渡し,最後にルートノード値を出力する.
https://www.acmicpc.net/problem/5639
難易度:シルバー1
タイプ:ツリー
質問する
与えられたノードがバイナリ探索ツリーを前列順に並べた場合、ノードの問題が後列順に出力される.
に答える
基本的にバイナリツリーの問題なので再帰で解決したいと思います.
関数ループ配列を作成することで、一番前の数をルートノードで除算し、後ろの配列の中でルートより小さい数を左で除算し、残りは右の3つの部分で除算します.
分割された部分を後方にループさせるために,まず左側の配列を再帰に渡し,次に右側の配列を再帰に渡し,最後にルートノード値を出力する.
正しいコード
import sys
input = sys.stdin.readline
#recursion error 방지
sys.setrecursionlimit(10**9)
arr = []
while True:
try:
x = int(input())
arr.append(x)
except:
break
def solution(A):
# 받은 배열 길이가 0이면 return
if len(A) == 0:
return
tempL, tempR = [], []
# 첫번째 값을 루트 노드로 설정
mid = A[0]
# 나머지 배열에 대해 for문을 돌면서 루트보다 커지는 부분을 기록해서 L과 R로 나눈다.
for i in range(1, len(A)):
if A[i] > mid:
tempL = A[1:i]
tempR = A[i:]
break
else:
#모두 mid보다 작은 경우
tempL = A[1:]
#왼쪽, 오른쪽 순으로 재귀 후 루트 노드 값 출력
solution(tempL)
solution(tempR)
print(mid)
solution(arr)
Reference
この問題について([アルゴリズム]白駿5639「バイナリ検索ツリー」解答パイソン), 我々は、より多くの情報をここで見つけました https://velog.io/@nkrang/알고리즘-백준-5639-이진-탐색-트리-풀이-파이썬テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol