Greatest Distance Between Two Nodes in Binary Tree

Greatest Distance Between Two Nodes in Binary Tree

Question

Get the greatest distance between two nodes in a binary tree. Assume links between nodes are bidirectional. Distance is defined as the amount of nodes connected along the path linked two nodes. Write an algorithm to calculate distance between two nodes. Take the figure at the right, the greatest length should be 4.

Solution

Usual post-order recursive binary tree traversal should do the job. In this case, (obviously) the path must passes through the root. So we should do the following. Recursively return the max length (from left or right) to the parent, and make an exception for the root. The result is simply the sum of maxes from left and right.

Example

# node structure 
class Node:
    def __init__(self, left=None, right=None): 
        self.left = left 
        self.right = right 
        
# join left and right max at root, literally 
def get_max_length(root): 
    left_max = length_from_node(root.left) 
    right_max = length_from_node(root.right) 
    return left_max + right_max 

# returning the max length beginning from this node 
def length_from_node(node): 
    if not node: return 0 
    left_max = length_from_node(node.left) 
    right_max = length_from_node(node.right) 
    return max(left_max, right_max) + 1 

# binary tree setup 
node_12 = Node() 
node_13 = Node() 
node_05 = Node() 
node_07 = Node(node_12, node_13) 
node_09 = Node() 
node_11 = Node() 
node_06 = Node(node_05, node_07) 
node_10 = Node(node_09, node_11) 
node_08 = Node(node_06, node_10) 
root = node_08 

# answer should be 5 
print get_max_length(root)