Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 n-ary 트리의 지름을 찾는 프로그램

<시간/>

n-ary 트리가 주어지고 트리의 지름을 결정한다고 가정해 봅시다. 트리의 지름은 트리의 두 리프 노드 사이에 존재하는 가장 긴 경로입니다. 나무의 지름을 나타내는 정수 값을 찾아 반환해야 합니다.

따라서 입력이 다음과 같으면

Python에서 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