【Leetcode解題】543. Diameter of Binary Tree
題目
- 題目連結
- 目標函式 :
diameterOfBinaryTree(root)- Input :
root: TreeNode - Output :
int
- Input :
解題概念
- 題意 : 給定一 Binary tree 的
root,需要回傳該 tree 的直徑 - Binary tree 直徑之定義 : 在 Binary tree 中,任意兩節點之間的最長路徑長
- 該路徑可能會 or 不會經過
root
- 該路徑可能會 or 不會經過
我的寫法
- 想法 : 將直徑分成兩種狀況
- 該路徑有經過
root: 直接利用maxDepth()去計算左右子樹的最大深度並回傳 - 該路徑沒有經過
root: 需要找出該路徑中高度最高的節點,再利用maxDepth()去計算左右子樹的最大深度並回傳
- 該路徑有經過
- 因此,需要對每個節點執行
maxDepth()去確認 maxDepth,最後最大的 maxDepth 即為 tree 直徑 - 程式碼 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19max_cnt = 0
def diameterOfBinaryTree(self, root):
def maxDepth(node):
if not node: return 0
left = maxDepth(node.left)
right = maxDepth(node.right)
# 更新 max_cnt
self.max_cnt = max(self.max_cnt, left + right)
# 繼續 maxDepth 之遞迴
return max(left, right) + 1
maxDepth(root)
return self.max_cnt - 成效 :
- Time Complexity : $O(n)$
- Runtime: 28 ms (faster than 67.98%)
- Memory Usage: 16.2 MB (more than 15.49%)
解答 or 其他優秀寫法
- 想法 : 與我的寫法大致相同
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Robin's Tech Blog!


