import java.util.Scanner;
class BNode{
public E info;
public BNode left;
public BNode right;
static int LEFT = 1;
static int RIGHT = 2;
public BNode(E info){ // konstruktor so eden argument, samo info poleto
this.info = info;
this.left = null;
this.right = null;
}
public BNode(E info, BNode left, BNode right){
this.info = info;
this.left = left;
this.right = right;
}
}
class BTree{
public BNode root;
public BTree(){
root = null;
}
public BTree(E info){
root = new BNode(info);
}
public BNode addChild(BNode Node, int where, E info){
BNode temp = new BNode(info);
if(where == BNode.LEFT){
if(Node.left != null){
return null;
}
Node.left = temp;
}else{
if(Node.right !=null){
return null;
}
Node.right = temp;
}
return temp;
}
public void InorderR(BNode r){
if(r!=null){
InorderR(r.left);
System.out.println(r.info.toString() + " ");
InorderR(r.right);
}
}
public void Inorder(){
System.out.print("INORDER: ");
InorderR(root);
System.out.println();
}
public void PreorderR(BNode r){
if(r!=null) {
System.out.println(r.info.toString() + " ");
InorderR(r.left);
InorderR(r.right);
}
}
public void Preorder(){
System.out.print("PREORDER: ");
PreorderR(root);
System.out.println();
}
public void PostorderR(BNode r){
if(r!=null) {
InorderR(r.left);
InorderR(r.right);
System.out.println(r.info.toString() + " ");
}
}
public void PostorderR(){
System.out.print("POSTORDER: ");
PostorderR(root);
System.out.println();
}
int maximumHeightOfNode(BNode node) {
if(node == null) {
return 0;
}
int leftSide = maximumHeightOfNode(node.left);
int rightSide = maximumHeightOfNode(node.right);
return Math.max(leftSide, rightSide) + 1;
}
int calculateDiameter(BNode node) {
if(node == null) {
return 0;
}
int leftSide = maximumHeightOfNode(node.left);
int rightSide = maximumHeightOfNode(node.right);
int heightOfNode = leftSide + rightSide + 1; // eden od rezultatite
int leftDiameter = calculateDiameter(node.left);
int rightDiameter = calculateDiameter(node.right);
int maxDiameter = Math.max(leftDiameter, rightDiameter);
return Math.max(heightOfNode, maxDiameter);
}
}
public class Main {
public static void main(String[] args) {
//BNode root = new BNode(10);
BTree drvo = new BTree(10);
drvo.addChild(drvo.root, drvo.root.LEFT, 5);
drvo.addChild(drvo.root, drvo.root.RIGHT, 6);
drvo.addChild(drvo.root.left, drvo.root.left.LEFT, 7);
drvo.addChild(drvo.root.left, drvo.root.left.RIGHT, 9);
drvo.addChild(drvo.root.right, drvo.root.right.RIGHT, 8);
drvo.addChild(drvo.root.left.left, drvo.root.left.left.LEFT, 5);
// drvo.InorderR(drvo.root);
// int i= drvo.numLeaves1(drvo.root);
System.out.println(drvo.calculateDiameter(drvo.root));
}
}