반응형
# Problem
Given the root of a binary tree, return the length of the longest path, where each node in the path has the same value. This path may or may not pass through the root. The length of the path between two nodes is represented by the number of edges between them.
Constraints:
|
# Solution 1
class Solution:
result: int = 0
def longestUnivaluePath(self, root: TreeNode) -> int:
def dfs(node: TreeNode):
if node is None:
return 0
# 존재하지 않는 노드까지 DFS 재귀 탐색
left = dfs(node.left)
right = dfs(node.right)
# 현재 노드가 자식 노드와 동일한 경우 거리 1 증가
if node.left and node.left.val == node.val:
left += 1
else:
left = 0
if node.right and node.right.val == node.val:
right += 1
else:
right = 0
# 왼쪽, 오른쪽 자식 노드간 거리의 합 최대값이 결과
self.result = max(self.result, left + right)
# 자식 노드 상태값 중 큰 값 리턴
return max(left, right)
dfs(root)
return self.result
현재 노드의 값과 왼쪽, 오른쪽 노드를 각각 비교해서 값이 같으면 +1
값이 다르면 0으로 바꿔줌 ( 트리 안에 더 긴 경로가 있다면 result에 들어있을 것임)
result는 현재 result 값, left+right의 값 중 최대값으로 업데이트
최대값 result 리턴
반응형
'Algorithm > LEET CODE ( 파이썬 알고리즘 인터뷰)' 카테고리의 다른 글
[LEET CODE] 617. Merge Two Binary Trees (0) | 2021.04.20 |
---|---|
[LEET CODE] 226. Invert Binary Tree (0) | 2021.04.20 |
[LEET CODE] 543. Diameter of Binary Tree (0) | 2021.04.19 |
[LEET CODE] 104. Maximum Depth of Binary Tree (0) | 2021.04.15 |
[LEET CODE] 787. Cheapest Flights Within K Stops ( 다익스트라 알고리즘 ) (0) | 2021.04.14 |