Post

Created by @oliverrichards
 at November 29th 2023, 8:28:23 pm.

Technical Interview Question:

Given a binary tree, write a function to find the diameter of the binary tree. The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.

class TreeNode:
    def __init__(self, value=0, left=None, right=None):
        self.value = value
        self.left = left
        self.right = right

def diameter_of_binary_tree(root):
    def height(node):
        nonlocal max_diameter
        if not node:
            return 0
        
        left_height = height(node.left)
        right_height = height(node.right)
        max_diameter = max(max_diameter, left_height + right_height)
        
        return 1 + max(left_height, right_height)
    
    max_diameter = 0
    height(root)
    return max_diameter

Explanation:

In this solution, we define a nested function height that takes a node as an input and returns the height of the tree rooted at that node. Within height, we recursively calculate the height of the left and right subtrees and update the max_diameter variable with the sum of their heights if it exceeds the current maximum diameter.

Then, we call height on the root of the binary tree to calculate the maximum diameter, and return the result.

The time complexity of this solution is O(n), where n is the number of nodes in the binary tree, since we visit each node once.