package com.interview.tree;
class Height{
int height;
}
/**
* http://www.geeksforgeeks.org/diameter-of-a-binary-tree/
* Test cases
* All left nodes
* All right nodes
*/
public class DiameterOfTree {
public int diameter(Node root){
Height height = new Height();
return diameter(root,height);
}
private int diameter(Node root, Height height){
if(root == null){
return 0;
}
Height leftHeight = new Height();
Height rightHeight = new Height();
int dial = diameter(root.left,leftHeight);
int diar = diameter(root.right,rightHeight);
height.height = Math.max(leftHeight.height, rightHeight.height) + 1;
return Math.max(Math.max(dial, diar),(1 + leftHeight.height + rightHeight.height));
}
public static void main(String args[]){
BinaryTree bt = new BinaryTree();
Node head = null;
head = bt.addNode(10, head);
head = bt.addNode(15, head);
head = bt.addNode(5, head);
head = bt.addNode(7, head);
head = bt.addNode(19, head);
head = bt.addNode(20, head);
head = bt.addNode(-1, head);
head = bt.addNode(21, head);
head = bt.addNode(11, head);
head = bt.addNode(12, head);
head = bt.addNode(13, head);
head = bt.addNode(14, head);
DiameterOfTree dt = new DiameterOfTree();
System.out.println(dt.diameter(head));
}
}