[LeetCode] 543. Diameter of Binary Tree
[LeetCode] 543. Diameter of Binary Tree の解答と解説
問題
https://leetcode.com/problems/diameter-of-binary-tree/description/
解答
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
self.res = 0
def dfs(curr):
if not curr:
return 0
left, right = dfs(curr.left), dfs(curr.right)
self.res = max(self.res, left + right)
return max(left, right) + 1
dfs(root)
return self.res
nをTreeのノード数とした場合、
- Time Complexity: O(n)
- Space Complexity: O(n)
解説
- 親ノードのdiameter = 子ノード(左)の最大の高さ + 子ノード(右)の最大の高さ
- diameter ≠ heightなので、diameterの最大値はdfsの関数外に定義しておき(self.res)、関数内で各ノード毎に計算・比較をする