이진 트리에서 두 노드 간 가장 긴 경로의 길이를 출력하라.
https://leetcode.com/problems/diameter-of-binary-tree/
가장 긴 경로를 찾는 방법은 먼저 가장 말단, 즉 리프 노드까지 탐색한 다음 부모로 거슬러 올라가면서 각각의 거리를 계산해 상태값을 업데이트 하면서 다음과 같이 누적해 나가면 된다.
최종 루트에서 상태값은 2, 거리는 3이 된다.
상태값은 리프 노드에서 현재 노드까지의 거리다.
거리는 왼쪽 자식 노드의 상태값과 오른쪽 자식 노드의 상태값의 합에 2를 더한 값이다.
self.longest는 최종 결과가 될 가장 긴 경로(거리), return 값은 상태값이다.
class Solution:
longest=0
def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
def dfs(node:TreeNode):
if not node:
return -1
left=dfs(node.left)
right=dfs(node.right)
self.longest=max(self.longest,left+right + 2)
return max(left,right) + 1
dfs(root)
return self.longest
'알고리즘 > 트리' 카테고리의 다른 글
트리의 직렬화 (0) | 2022.05.02 |
---|---|
두 이진 트리 병합 (0) | 2022.04.30 |
이진트리 반전 (0) | 2022.04.26 |
이진 트리의 최대 깊이 (0) | 2022.04.22 |
트리 (0) | 2022.04.21 |