Leetcode 687: 최장 동치 경로(초상세 해법!!!)
참고: 두 노드 사이의 경로 길이는 둘 사이의 모서리로 표시됩니다.
예 1:
입력:
5
/ \
4 5
/ \ \
1 1 5
출력:
2
예 2:
입력:
1
/ \
4 5
/ \ \
4 4 5
출력:
2
주의: 주어진 두 갈래 나무는 10000개의 결점을 넘지 않습니다.나무의 높이는 1000을 넘지 않는다.
문제 풀이 사고방식
유사한 문제
Leetcode 124: 두 갈래 나무의 최대 경로와 (초상세 해법!!!)
Leetcode 543: 두 갈래 나무의 지름(초상세 해법!!!)
우리는 함수
longestUnivalue
를 정의하여 좌우 양쪽 중 가장 큰 경로의 길이를 되돌려줍니다. 이때 우리는 네 가지 상황을 고려합니다.root.left == root == root.right
root.left == root
root.right == root
root.left != root != root.right
첫 번째 상황에 대해 이때쯤 아이와 뿌리가 같을 때 우리는 우리의 최대 길이
res=max(res,l+r+2)
를 갱신하고 max(l,r)+1
로 돌아가야 한다.두 번째 상황에 대해 왼쪽 아이와 뿌리가 같으면 최대 길이res=max(res,l+1)
를 업데이트하고 l+1
로 돌아가야 한다.세 번째 상황에 대해 오른쪽 아이와 뿌리가 같으면 최대 길이res=max(res,r+1)
를 갱신하고 r+1
로 돌아가야 한다.네 번째 경우, 이때 0
로 돌아가기만 하면 된다.class Solution:
def longestUnivaluePath(self, root: 'TreeNode') -> 'int':
res = 0
def longestUnivalue(root):
nonlocal res
if not root:
return 0
l = longestUnivalue(root.left)
r = longestUnivalue(root.right)
if root.left and root.right and root.left.val == root.val == root.right.val:
res = max(res, l + r + 2)
return max(l, r) + 1
elif root.left and root.left.val == root.val:
res = max(res, l+1)
return l + 1
elif root.right and root.right.val == root.val:
res = max(res, r+1)
return r + 1
else:
return 0
longestUnivalue(root)
return res
위의 코드를 살짝 간략하게 할게요.
class Solution:
def longestUnivaluePath(self, root: 'TreeNode') -> 'int':
res = 0
def longestUnivalue(root):
nonlocal res
if not root:
return 0
l = longestUnivalue(root.left)
r = longestUnivalue(root.right)
pl, pr = 0, 0
if root.left and root.left.val == root.val:
pl = l + 1
if root.right and root.right.val == root.val:
pr = r + 1
res = max(res, pl + pr)
return max(pl, pr)
longestUnivalue(root)
return res
이 질문의 다른 언어 버전을 GitHub Leetcode에 추가했습니다.
문제가 있으면 여러분이 지적해 주시기 바랍니다!!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Leetcode 199: 두 갈래 나무의 오른쪽 보기(초상세 해법!!!)두 갈래 나무를 정해서 오른쪽에 서 있는 것을 상상하고 꼭대기에서 끝까지 순서대로 오른쪽에서 볼 수 있는 노드 값을 되돌려줍니다. 예: 문제 풀이 사고방식 이 문제는 사실 Leetcode 102: 두 갈래 나무의 차...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.