/**
* Created by kiyan on 5/5/16.
*/
public class TreeDiameter {
public int getTreeDiameter(TreeNode root) {
int d = 0;
if (root == null) return d;
d = height(root.left) + height(root.right) + 1;
int ld = getTreeDiameter(root.left);
int rd = getTreeDiameter(root.right);
/*
Return max of following three
1) Diameter of left subtree
2) Diameter of right subtree
3) Height of left subtree + height of right subtree + 1 */
return Math.max(d, Math.max(ld, rd));
}
private int height(TreeNode root) {
if (root == null) return 0;
return Math.max(height(root.left), height(root.right)) + 1;
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
}