반응형
# Problem
Given the root of a binary tree, return the length of the diameter of the tree. The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root. The length of a path between two nodes is represented by the number of edges between them.
Constraints:
|
# My Answer
class Solution:
def diameterOfBinaryTree(self, root: TreeNode) -> int:
def dfs(tree):
l=0
r=0
l0=0
r0 =0
if tree.left:
a = dfs(tree.left)
l = 1+a[1] # 가장 깊은 노드
l0 = a[0] # 왼쪽 트리의 최대값 저장
if tree.right:
b = dfs(tree.right)
r = 1+b[1] # 가장 깊은 노드
r0 = b[0] # 오른쪽 트리의 최대값 저장
m = max(l+r,l0,r0) # 현재 최대값, 왼쪽, 오른쪽 트리중 각각 최대값
return (m,max(l,r))
return dfs(root)[0]
# Solution 1 - 상태값 누적 트리 DFS
class Solution:
longest: int = 0
def diameterOfBinaryTree(self, root: TreeNode) -> int:
def dfs(node: TreeNode) -> int:
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
리프 노드까지 탐색한 다음 부모로 거슬러 올라가면서 각각의 거리를 계산, 상태값 업데이트 (누적)
존재하지 않는 노드에는 -1 부여
거리 = left + right + 2
상태값 = max(left, right) + 1
ex) 자식 노드가 하나도 없는 경우 left, right = -1 , 거리 =0 , 상태값 = 0
자식 노드가 모두 있는 경우 left,right = 0, 거리 = 2, 상태값 = 1
longest 변수는 재할당을 해야하기 때문에 클래스 변수로 선언 ( 숫자이기 때문에)
반응형
'Algorithm > LEET CODE ( 파이썬 알고리즘 인터뷰)' 카테고리의 다른 글
[LEET CODE] 226. Invert Binary Tree (0) | 2021.04.20 |
---|---|
❗️[LEET CODE] 687. Longest Univalue Path (0) | 2021.04.20 |
[LEET CODE] 104. Maximum Depth of Binary Tree (0) | 2021.04.15 |
[LEET CODE] 787. Cheapest Flights Within K Stops ( 다익스트라 알고리즘 ) (0) | 2021.04.14 |
[LEET CODE] 743. Network Delay Time ( 다익스트라 알고리즘) (0) | 2021.04.14 |