📖 Scenario: You are working on a network system where each node represents a server. The longest path between any two servers is important to understand the maximum delay in communication.This longest path is called the diameter of the network tree.
🎯 Goal: Build a program to find the diameter of a binary tree representing the network.The diameter is the number of edges on the longest path between any two nodes.
📋 What You'll Learn
Create a class called TreeNode to represent each node in the binary tree with attributes val, left, and right.
Create a binary tree with the exact structure given.
Create a helper function depth that calculates the depth of a node and updates the diameter.
Calculate and print the diameter of the binary tree.
💡 Why This Matters
🌍 Real World
Network engineers use tree structures to model communication paths. Finding the longest path helps identify maximum delay or bottlenecks.
💼 Career
Understanding tree traversal and diameter calculation is useful for software engineers working on network design, data structures, and algorithms.
Progress0 / 4 steps
1
Create the TreeNode class and build the binary tree
Create a class called TreeNode with an __init__ method that takes val and sets left and right to None. Then create the binary tree with root node value 1, left child 2, right child 3, left child of 2 as 4, and right child of 2 as 5.
DSA Python
Hint
Define the TreeNode class first. Then create nodes and link them as left and right children.
2
Create a variable to store the diameter
Create a variable called diameter and set it to 0 to keep track of the longest path found so far.
DSA Python
Hint
Use a simple variable to store the maximum diameter found during traversal.
3
Write the depth function to calculate diameter
Define a function called depth that takes a node as input. Inside, if node is None, return 0. Otherwise, recursively find the depth of left and right children by calling depth(node.left) and depth(node.right). Update the global diameter variable with the maximum of its current value and the sum of left and right depths. Return the maximum of left and right depths plus 1.
DSA Python
Hint
Use recursion to find depths. Update diameter by adding left and right depths.
4
Calculate and print the diameter
Call the depth function with root as argument to start the calculation. Then print the value of diameter.
DSA Python
Hint
Start the depth calculation from the root and then print the diameter variable.
Practice
(1/5)
1. What does the diameter of a binary tree represent?
easy
A. The length of the longest path between any two nodes in the tree
B. The number of nodes in the tree
C. The height of the tree
D. The number of leaf nodes
Solution
Step 1: Understand the diameter definition
The diameter is the longest path between any two nodes, not just from root to leaf.
Step 2: Differentiate from height and node count
Height is longest root-to-leaf path; node count is total nodes; diameter can be longer than height.
Final Answer:
The length of the longest path between any two nodes in the tree -> Option A
Quick Check:
Diameter = longest path length [OK]
Hint: Diameter is longest path between any two nodes, not just height [OK]
Common Mistakes:
Confusing diameter with height
Thinking diameter counts nodes instead of edges
Assuming diameter is always root to leaf
2. Which of the following Python function signatures is correct for computing the diameter of a binary tree node?
easy
A. def diameter(root: int) -> TreeNode:
B. def diameter(root: Optional[TreeNode]) -> int:
C. def diameter(root: TreeNode) -> str:
D. def diameter(root: List[int]) -> int:
Solution
Step 1: Identify correct parameter and return types
Function takes a tree node or None and returns an integer diameter length.
Step 2: Check each option's signature
def diameter(root: Optional[TreeNode]) -> int: matches expected input (node or None) and output (int). Others mismatch types.
Final Answer:
def diameter(root: Optional[TreeNode]) -> int: -> Option B
Quick Check:
Input node, output int diameter [OK]
Hint: Diameter function inputs root node, returns int length [OK]
Common Mistakes:
Using wrong input type like int or list
Returning wrong type like str or TreeNode
Missing Optional for nullable root
3. What is the output of the following code snippet?
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def diameter(root):
diameter_val = 0
def depth(node):
nonlocal diameter_val
if not node:
return 0
left = depth(node.left)
right = depth(node.right)
diameter_val = max(diameter_val, left + right)
return max(left, right) + 1
depth(root)
return diameter_val
root = TreeNode(1, TreeNode(2, TreeNode(4), TreeNode(5)), TreeNode(3))
print(diameter(root))
medium
A. 2
B. 4
C. 3
D. 5
Solution
Step 1: Understand tree structure and depth calls
Tree has root 1, left subtree with nodes 2,4,5 and right subtree with node 3. Longest path is 4->2->1->3 or 5->2->1->3 with length 3 edges.
Step 2: Calculate diameter_val during recursion
At node 2, left and right depths are 1 each, sum 2; at root, left depth 2, right depth 1, sum 3 updates diameter_val to 3.
Final Answer:
3 -> Option C
Quick Check:
Longest path edges = 3 [OK]
Hint: Diameter counts edges on longest path, not nodes [OK]
Common Mistakes:
Counting nodes instead of edges for diameter
Ignoring nonlocal update of diameter_val
Misunderstanding tree structure
4. Find the error in the following diameter function and select the fix:
def diameter(root):
diameter_val = 0
def depth(node):
if not node:
return 0
left = depth(node.left)
right = depth(node.right)
diameter_val = max(diameter_val, left + right)
return max(left, right) + 1
depth(root)
return diameter_val
medium
A. Initialize diameter_val inside depth() function
B. Change 'diameter_val' to a global variable
C. Return diameter_val inside depth() function
D. Add 'nonlocal diameter_val' inside depth() to update outer variable
Solution
Step 1: Identify variable scope issue
diameter_val is assigned inside depth() but not declared nonlocal, so assignment creates local variable, not updating outer diameter_val.
5. Given a binary tree where some nodes have only one child, how does the diameter calculation handle paths through these nodes?
Choose the correct statement about the diameter in such cases.
hard
A. Diameter counts the longest path even if it passes through nodes with only one child
B. Diameter ignores nodes with only one child when calculating longest path
C. Diameter is always the height of the tree when nodes have one child
D. Diameter equals the number of leaf nodes in the tree
Solution
Step 1: Understand diameter path definition
Diameter is longest path between any two nodes, regardless of node children count.
Step 2: Consider nodes with one child
Paths can pass through nodes with one child; these nodes do not exclude paths from consideration.
Final Answer:
Diameter counts the longest path even if it passes through nodes with only one child -> Option A
Quick Check:
Diameter includes all nodes on longest path [OK]
Hint: Diameter includes all nodes on longest path, child count doesn't exclude [OK]
Common Mistakes:
Assuming nodes with one child are ignored
Confusing diameter with height in skewed trees
Thinking diameter equals leaf count
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.