트리 6

백준 1167 트리의 지름

https://www.acmicpc.net/problem/1167  이 문제는 트리에서 가장 먼 두 정점 사이의 거리를 구하는 문제이다.   트리에서 가장 긴 지름은 무조건 말단 노드와 말단 노드 사이일 것이다. 그리고 임의의 노드에서 가장 먼 노드가 그 지름의 말단 노드일 것이다. 자세한 증명은 https://blog.myungwoo.kr/112 이 블로그를 참고하길 바란다.  아무튼 결국 우리는 임의의 노드(루트노드)에서 가장 먼 노드를 구하고, 그 노드에서 가장 먼 노드를 구하면 된다. import sysinput = sys.stdin.readlinesys.setrecursionlimit(10**6)def find(cur_n,cur_w): for next_w,next_n in tree[cur_..

백준 1991 트리 순회

https://www.acmicpc.net/problem/1991  이 문제는 A가 뿌리로 시작하는 트리를 전위,중위,후위 순회한 결과를 출력하는 문제이다.   전위순회는 루트,왼쪽서브트리,오른쪽서브트리 순으로 순회하는 것이고 중위순회는 왼쪽서브트리,루트,오른쪽서브트리 순으로 순회하는 것이고, 후위순회는 왼쪽서브트리,오른쪽서브트리,루트 순으로 순회하는 것이다.   이 문제는 필자는 먼저 딕셔너리를 이용하여, 트리를 구현하고, 재귀를 이용하여 왼쪽,오른쪽 서브트리를 계속해서 호출하여 잎에 닿을 때까지 깊숙이 내려가 잎에서 재귀를 멈추고 리턴하는 식으로 풀었다. 이 때 간단하게 순서만 조금 바꿔주면 전위,중위,후위를 각각 구현할 수 있다. import sysinput = sys.stdin.readlinede..

백준 11725 트리의 부모 찾기

https://www.acmicpc.net/problem/11725  이 문제는 노드의 개수 N이 주어지고 이후 N-1개의 노드 간 연결을 보여준다. 그리고 1을 루트로 하는 트리에서 2번 노드부터의 부모 노드를 출력하는 문제이다.  이 문제는 양방향 graph를 defaultdict를 사용하여 구현하고, DFS를 이용하여 1부터 시작하여 트리를 그려나가며 부모와 자식을 저장하는 식으로 풀었다. 필자는 처음엔 재귀를 이용하여 DFS를 풀었으나, 입력 범위가 매우 넓어, 재귀오류가 일어나, 스택을 이용하여 DFS를 구현하였다 from collections import defaultdict as ddimport sysinput = sys.stdin.readlinedef iterative_DFS(start):..