Logo

[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)、関数内で各ノード毎に計算・比較をする