543. Diameter of Binary Tree
class Solution {
private int diameter = 0;
//O(n) time, O(n) space taken by recursive call stack in skewed binary tree
private int computeDiameter(TreeNode node){
if(node==null)
return 0;
int left = computeDiameter(node.left);
int right = computeDiameter(node.right);
//This is the cross path length that is results from joining of the longest left path and the longest right path through the current node.
//All possible candidates that might give the longest path will be formed adding the number of nodes that give the longest depth in the left subtree and the number of nodes that give the longest depth in the right subtree.
//The number of nodes overcount the length by 1. This is okay because the pathLength doesn't add an edge from the left subtree to the current node and the right subtree to current node.
int pathLength = left + right;
diameter = Math.max(diameter, pathLength);
return Math.max(left, right) + 1;
}
public int diameterOfBinaryTree(TreeNode root) {
computeDiameter(root);
return diameter;
}
}