1
# Runtime: 95 ms (Top 16.95%) | Memory: 16.5 MB (Top 10.21%)4
Top Down recursion approach: it is sub optimal10
def diameter(self, root):13
return self.max_depth(root.left) + self.max_depth(root.right)15
def max_depth(self, root):18
return 1 + max(self.max_depth(root.left), self.max_depth(root.right))22
diameter = self.diameter(root)23
if self.max_diameter < diameter:24
self.max_diameter = diameter25
self.diameterOfBinaryTree(root.left)26
self.diameterOfBinaryTree(root.right)28
def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:30
return self.max_diameter33
Better Approach: I can try to approach this problem using bottom up recursion36
def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:43
right = fun(root.right)44
if left + right > self.diameter:45
self.diameter = left + right46
return max(left, right) + 1