Tree 5

[Python] 5178. 노드의 합

처음 코드 tc = int(input()) for idx in range(1, tc+1): n, m, l = map(int, input().split()) # 노드의 개수 n, 리프 노드의 개수 m, 값을 출력할 노드 번호 l node = [0 for _ in range(n+1)] for _ in range(m): leaf, num = map(int, input().split()) node[leaf] = num if n % 2: # 노드의 개수가 홀수인경우 아래에서 자식노드 i, i+1을 더해서 부모노드에 넣어주니까 n -= 1 # -1을 해줄 필요가 있다. (즉, i+1때문에) for i in range(n, 1, -2): try: # 자식 노드 두개 더해서 부모 노드에 넣어준다. node[i//2] ..

[Python] 5177. 이진힙

tc = int(input()) for idx in range(1, tc+1): n = int(input()) # 목표 노드 node = [0] + list(map(int, input().split())) # 노드들 받아오기 answer = 0 # 위치 바꾸기 for i in range(1, n+1): while node[i//2] > node[i]: # 부모가 나보다 클때 바꿔주기 node[i//2], node[i] = node[i], node[i//2] i //= 2 # 다음 조상도 검토 # 조상 노드 다 더하기 p = n//2 # n의 부모부터 시작이니까 while p > 0: answer += node[p] p //= 2 print(node) print('#{} {}'.format(idx, ans..

[Python] 5174. subtree

후위 순회 풀이 # 후위 순회 알고리즘 / 어떤 순회를 써도 상관 X def postorder(n): global answer if n: postorder(left[n]) postorder(right[n]) answer += 1 tc = int(input()) for idx in range(1, tc+1): e, n = map(int, input().split()) # 간선의 개수 e, 시작 노드 n node = list(map(int, input().split())) # 노드 연결 정보 받아오기 left = [0 for _ in range(e+2)] # 부모를 인덱스로 자식번호 저장 right = [0 for _ in range(e+2)] for i in range(0, e*2, 2): p, c = n..

[Python] 1231. 중위 순회

# 중위 순회 def in_order(n): if n: in_order(left[n]) print(tree[n], end='') # 정점의 알파벳 출력 in_order(right[n]) for idx in range(1, 11): n = int(input()) tree = [0 for _ in range(n+1)] # 트리(알파벳) left = [0 for _ in range(n+1)] # 왼쪽 자식 받을거야 right = [0 for _ in range(n+1)] # 오른쪽 자식 받을거야 # 정점 정보를 받아올 때, 맨앞에 정점번호 int로 바꿔주기 귀찮으니 i로 한다. (1부터 n까지의 정수라고 주어짐) for i in range(1, n+1): info = input().split() # 정점 정보..