Skip to main content

Dimeter of Binary Tree

Problem Statement:​

Given the root of a binary tree, return the length of the diameter of the 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.

The length of a path between two nodes is represented by the number of edges between them.

Example 1:

Input: root = [1,2,3,4,5]
Output: 3
Explanation: 3 is the length of the path [4,2,1,3] or [5,2,1,3].

Example 2:

Input: root = [1,2]
Output: 1

  • Example:



✅ Solution: Postorder DFS (Height + Diameter in One Pass)​

class Solution {
public:
int getHeight(TreeNode *root, int &diameter) {
if(root == NULL) return 0;

int leftHeight = getHeight(root->left, diameter);
int rightHeight = getHeight(root->right, diameter);

// Diameter through current node = longest path between two leaves
diameter = max(diameter, leftHeight + rightHeight);

// Return height of current node
return 1 + max(leftHeight, rightHeight);
}

int diameterOfBinaryTree(TreeNode* root) {
int diameter = 0;
getHeight(root, diameter);
return diameter;
}
};


📝 How It Works​

  • The diameter of a binary tree is the length of the longest path between any two nodes.
  • This path may or may not pass through the root.
  • At each node:
    • Recursively get the height of left and right subtrees.
    • Update the diameter with leftHeight + rightHeight, which is the number of edges on the path through the node.
  • Final result is the maximum such sum across all nodes.

🧩 Key Formula​

diameter = max(diameter, leftHeight + rightHeight)

height = 1 + max(leftHeight, rightHeight)


⏱️ Time & Space Complexity​

MetricValue
⏱️ Time ComplexityO(n) — visits each node once
🪄 Space ComplexityO(h) — height of tree recursion stack

⚠️ Edge Cases​

  • ✅ Empty tree → diameter is 0
  • ✅ Single node → diameter is 0
  • ✅ Perfectly balanced tree → correctly finds middle diameter
  • ✅ Skewed tree → correctly gives longest path

💡 Other Approaches​

ApproachTimeNotes
Brute force (height + traversal at each node)O(n²)❌ TLE on large trees
DFS (used here)O(n)✅ Optimal and clean


🚀 Level Up Your Engineering Mindset

Never Study in Isolation. Join Binary Dose.

Connect with fellow engineers, clear conceptual doubts, and get 2 visual breakdowns & engineering mental models daily across our community channels.

Discord
Official Hub

Discord Community

Start at #welcome-and-rules, say hello in #general-chat, clear doubts, and collaborate with engineers worldwide.

Join Discord Server→
⚡
Daily Knowledge Drops

Daily Visual Deep-Dives

Bite-sized system design schematics, core OS internals, and DSA intuition served right into your feeds every single day.

💡Have handwritten notes, cheat-sheets, or want to publish a technical article?
Learn How to Contribute→