Diameter of Binary Tree — Tree DP Height Trick
Advertisement
Problem 367 · Diameter of Binary Tree
Difficulty: Medium · Pattern: Tree DP (depth function)
Intuition
At each node, the longest path through it = left_depth + right_depth. Track global max.
Solutions
# Python
def diameterOfBinaryTree(root):
self_ans = [0]
def depth(node):
if not node: return 0
l, r = depth(node.left), depth(node.right)
self_ans[0] = max(self_ans[0], l+r)
return max(l,r)+1
depth(root)
return self_ans[0]
// Java
int ans = 0;
public int diameterOfBinaryTree(TreeNode root) { depth(root); return ans; }
int depth(TreeNode node) {
if (node==null) return 0;
int l=depth(node.left), r=depth(node.right);
ans=Math.max(ans,l+r);
return Math.max(l,r)+1;
}
// C++
int ans=0;
int depth(TreeNode* node) {
if (!node) return 0;
int l=depth(node->left), r=depth(node->right);
ans=max(ans,l+r);
return max(l,r)+1;
}
int diameterOfBinaryTree(TreeNode* root) { depth(root); return ans; }
Complexity
- Time: O(n)
- Space: O(h)
Advertisement