I have written a code for finding diameter of Binary Tree. Need suggestions for the following:
The diameter of a tree T is
Diameter(T) = max( Diameter(T.left), Diameter(T.right), Height(T.left)+Height(T.right)+1 )
private class Data {
public int height;
public int diameter;
}
private void diameter(TreeNode root, Data d) {
if (root == null) {
d.height = 0; d.diameter = 0; return;
}
diameter(root.left, d); // get data in left subtree
int hLeft = d.height;
int dLeft = d.diameter;
diameter(root.right, d); // overwrite with data in right tree
d.diameter = Math.max(Math.max(dLeft, d.diameter), hLeft+d.height+1);
d.height = Math.max(hLeft, d.height) + 1;
}
public int diameter(TreeNode root) {
Data data = new Data();
diameter(root, data);
return data.diameter;
}