1class Solution {
2 private int maxDiameter = 0;
3
4 public int diameterOfBinaryTree(TreeNode root) {
5 calculateHeightAndDiameter(root);
6 return maxDiameter;
7 }
8
9 private int calculateHeightAndDiameter(TreeNode node) {
10 if (node == null) return 0;
11
12 int leftHeight = calculateHeightAndDiameter(node.left);
13 int rightHeight = calculateHeightAndDiameter(node.right);
14
15 int diameterThroughNode = leftHeight + rightHeight;
16
17 maxDiameter = Math.max(maxDiameter, diameterThroughNode);
18
19 return 1 + Math.max(leftHeight, rightHeight);
20 }
21}