CCCPaste

Untitled

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

    }
}