每个node的max直径是(leftTreeHeight + rightTreeHeight).
设个Gobal var存目前看到的最大diameter. dfs返回当前node为root的treeHeight。

import java.util.*;

public class Solution {
    int diameter = 0;

    public int diameterOfBinaryTree (TreeNode root) {
      dfs(root);
      return diameter;
    }
    
    // returns height of the tree 
    int dfs(TreeNode root) {
      if (root == null) return 0;
      int lh = dfs(root.left);
      int rh = dfs(root.right);
      int curDiameter = lh + rh;
      diameter = Math.max(curDiameter, diameter);
        
      return Math.max(lh, rh) + 1;
    }
}