Link: 543. Diameter of Binary Tree
Track: NeetCode150
Question
Restate the problem
Method 1
Method 2
Method
Approach
At each node:
left = dfs(node.left)right = dfs(node.right)- update answer:
diameter = max(diameter, left + right) - return height to parent:
max(left, right) + 1
Complexity
- Time Complexity:
O(n)(visit each node once) - Space Complexity:
O(h)recursion stack (worstO(n), balancedO(log n))
Edge Case
Code
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
self.diameter = 0
def dfs(node):
if not node:
return 0
left = dfs(node.left)
right = dfs(node.right)
self.diameter = max(self.diameter, left + right)
return max(left, right) + 1
dfs(root)
return self.diameterHistory
- Feb-22-2026 Solved, count length, not node
- Jan-19-2026 Peeked, no idea, use global variable