Skip to content

Diameter Of Binary Tree

LeetCode Problem

# https://leetcode.com/problems/diameter-of-binary-tree/description/
class Solution:
    def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
        def height(root):
            if not root:
                return 0
            return 1 + max(height(root.left), height(root.right))  # standard formula

        if not root:
            return 0
        # 3 options
        op1 = height(root.left) + height(root.right)
        # skewed tree options
        op2 = self.diameterOfBinaryTree(root.left)
        op3 = self.diameterOfBinaryTree(root.right)
        return max(op1, max(op2, op3))


# Solution 2
class Solution:
    def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
        ans = 0

        def height(root):
            nonlocal ans
            if not root:
                return 0
            left = height(root.left)
            right = height(root.right)
            ans = max(ans, left + right)  # no negative
            return 1 + max(left, right)  # including node

        height(root)
        return ans