What about this approach (is it good) :
private int diameter;
public int diameter() {
this.diameter(this.root);
return this.diameter;
}
private int diameter(Node node) {
if(node==null)
return 0;
if(node.left==null&&node.right==null)
return 1;
int left=this.diameter(node.left);
int right=this.diameter(node.right);
this.diameter=Math.max(diameter, left+right);
return 1+Math.max(left, right);
}