n-ary 트리가 주어지고 트리의 지름을 결정한다고 가정해 봅시다. 트리의 지름은 트리의 두 리프 노드 사이에 존재하는 가장 긴 경로입니다. 나무의 지름을 나타내는 정수 값을 찾아 반환해야 합니다.
따라서 입력이 다음과 같으면
그러면 출력은 3이 됩니다.
이 n차 트리의 지름은 27->14, 14->42, 42->56 또는 42->65(다이어그램에서 빨간색 선으로 표시)의 가장자리로 구성됩니다. 경로 길이는 3입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
답변 :=1
-
깊이() 함수를 정의합니다. 이것은 뿌리를 내릴 것입니다
-
루트가 비어 있지 않으면
-
0 반환
-
-
children :=값 0, 0을 포함하는 새 목록
-
temp_children :=새 목록
-
루트의 자식에 있는 각 자식에 대해 다음을 수행합니다.
-
temp_children의 끝에 깊이(자식) 삽입
-
-
(temp_children)의 크기가 0이면
-
어린이 :=temp_children
-
-
ans :=최대 ans, sum(목록 하위 정렬 [(자식)의 인덱스 길이 - 2부터 끝까지]) + 1
-
최대 자식 + 1 반환
-
-
깊이(루트)
-
반환(ans -1)
예제(파이썬)
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
class Node:def __init__(self, value, child =None) -> None:self.val =value self.children =[] if child !=None:자식의 값:self.children.append(value )ans =1def solve(root):def depth(root):전역 ans if not root:return 0 children =[0, 0] temp_children =[root.children의 자식에 대한 depth(child)] if len(temp_children)> 0:children =temp_children ans =max(ans, sum(sorted(children)[-2:]) + 1) return max(children) + 1 depth(root) return ans -1node6 =Node(65)node5 =Node( 56)node4 =Node(42, [node5, node6])node3 =Node(32)node2 =Node(27)node1 =Node(14, [node2, node3, node4])root =node1print(solve(root))사전>입력
node6 =Node(65)node5 =Node(56)node4 =Node(42, [node5, node6])node3 =Node(32)node2 =Node(27)node1 =Node(14, [node2, node3, 노드4]) 루트 =노드1출력
3