import java
import java
} node.right = insert(value,
node.right);
public int getValue() {
}
return value;
node.height =
}
Math.max(height(node.left),
} height(node.right)) + 1;
return node; } balanced(node.left) &&
balanced(node.right); }
public void populate(int[] nums) {
public void display() {
for (int i = 0; i < nums.length; i++)
{ display(this.root, "Root Node: ");
this.insert(nums[i]); } } }
public void populatedSorted(int[] private void display(Node node,
nums) { String details) {
populatedSorted(nums, 0, if (node == null) {
nums.length); }
return;
private void populatedSorted(int[]
}
nums, int start, int end) {
System.out.println(details +
if (start >= end) {
node.value);
return; }
display(node.left, "Left child of " +
int mid = (start + end) / 2; node.value + " : ");
this.insert(nums[mid]); display(node.right, "Right child of
" + node.value + " : ");
populatedSorted(nums, start,
mid); }
populatedSorted(nums, mid + 1, MAIN FILE –
end); }
import java.util.Scanner;
public boolean balanced() {
public class Main {
return balanced(root); }
public static void main(String[]
private boolean balanced(Node args) {
node) {
// Scanner scanner = new
if (node == null) { Scanner(System.in);
return true; } // BinaryTree tree = new
return Math.abs(height(node.left) BinaryTree();
- height(node.right)) <= 1 && // tree.populate(scanner);
// tree.prettyDisplay(); return height(root);
}
BST tree = new BST(); private int height(Node node) {
int[] nums = { 5, 2, 7, 1, 4, 6, 9, 8, if (node == null) {
3, 10 };
return -1;
tree.populate(nums);
}
tree.display();
return node.height;
AVL –
}
class AVL {
public void insert(int value) {
public class Node {
root = insert(value, root);
private int value;
}
private Node left;
private Node insert(int value, Node
private Node right; node) {
private int height; if (node == null) {
public Node(int value) { node = new Node(value);
this.value = value; return node;
} }
public int getValue() { if (value < node.value) {
return value; node.left = insert(value,
node.left);
}
}
}
if (value > node.value) {
private Node root;
node.right = insert(value,
public AVL() {
node.right);
}
}
public int height() {
node.height = if(height(node.right.left) -
Math.max(height(node.left), height(node.right.right) < 0) {
height(node.right)) + 1;
// right right case
return rotate(node);
return leftRotate(node);
}
}
if(height(node.right.left) -
private Node rotate(Node node) { height(node.right.right) > 0) {
if (height(node.left) - // left right case
height(node.right) > 1) {
node.right =
// left heavy rightRotate(node.right);
if(height(node.left.left) - return leftRotate(node);
height(node.left.right) > 0) {
}
// left left case
return node;
return rightRotate(node);
}
}
public Node rightRotate(Node p) {
if(height(node.left.left) -
Node c = p.left;
height(node.left.right) < 0) {
Node t = c.right;
// left right case
c.right = p;
node.left =
leftRotate(node.left); p.left = t;
} else { // update