In: Computer Science
The Code for the following question is :
import java.util.Scanner;
//Creating class for the node
class Node{
int data;
Node left,right;
Node(int data){
this.data = data;
left = right = null;
}
}
public class BstBalanceFactor {
Node root;
// Constructor
BstBalanceFactor() {
root = null;
}
// This method mainly calls insertRec()
void insert(int key) {
root = insertRec(root, key);
}
/* A recursive function to insert a new key in BST */
Node insertRec(Node root, int key) {
/* If the tree is empty, return a new node */
if (root == null) {
root = new Node(key);
return root;
}
/* Otherwise, recur down the tree */
if (key < root.data)
root.left = insertRec(root.left, key);
else if (key > root.data)
root.right = insertRec(root.right, key);
/* return the (unchanged) node pointer */
return root;
}
// This method mainly calls PreorderRec()
void Preorder() {
PreorderRec(root);
}
void PreorderRec(Node node)
{
if (node == null)
return;
/* first print data of node */
System.out.print(node.data + " ");
PreorderRec(node.left);
PreorderRec(node.right);
}
public int getHeight(Node n){
if(n == null) {
return -1;
}
return Math.max(getHeight(n.left), getHeight(n.right))+1;
}
// Find the BalanceFactor of a Node
public int BalanceFactor( Node node){
int balanceFactor = 0;
if (node == null)
return 0;
if (node.left == null && node.right == null)
return 1;
int heightL = BalanceFactor(node.left);
int heightR = BalanceFactor(node.right);
balanceFactor = heightL - heightR;
return balanceFactor;
}
//Printing the output
public void print(){
printRec(root);
}
//Recursive call to print()
public void printRec(Node node){
if(node != null) {
System.out.println(node.data + " " + getHeight(node) + " " + BalanceFactor(node));
printRec(node.left);
printRec(node.right);
}
}
public static void main(String args[]){
BstBalanceFactor tree = new BstBalanceFactor();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int array[] = new int[n];
for (int i = 0; i <n ; i++) {
array[i] = sc.nextInt();
}
for (int i = 0; i <n ; i++) {
tree.insert(array[i]);
//tree.print();
}
tree.Preorder();
System.out.println();
System.out.println(" Node " + "Height " + "Balance Factor " );
tree.print();
}
}
/*****************************************************************************************************************************************/
The screenshot of the output is attached here

"C:Program Files\Java dk1.8.0 191\bin Gava.exe". 5 85 89 3 2 8 65 92 5 3 2 85 8 65 89 92 Node Height Balance Factor 5 3 1 3 1 1 201 85 20 8 1-1 65 0 1 89 1 -1 92 0 1 Process finished with exit code 0