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)); } }