class Pair {
int ht;
int diameter;
}
public class Solution {
public static int diameterOfBinaryTree(BinaryTreeNode<Integer> root){
Pair ans = diameterOfBinaryTree_(root);
return ans.diameter;
}
public static Pair diameterOfBinaryTree_(BinaryTreeNode<Integer> root){
if (root == null) {
Pair base = new Pair();
base.ht = 0;
base.diameter = 0;
return base;
}
Pair left = diameterOfBinaryTree_(root.left);
Pair right = diameterOfBinaryTree_(root.right);
Pair myAns = new Pair();
myAns.ht = Math.max(left.ht, right.ht) + 1;
int opt1 = left.diameter;
int opt2 = right.diameter;
int opt3 = left.ht + right.ht + 1;
myAns.diameter = Math.max(opt1, Math.max(opt2, opt3));
return myAns;
}
}