Tuesday 28 November 2017

Java Program to Perform Left Rotation on a Binary Search Tree


Code:

import java.util.Scanner;

class SBBST
{
    SBBST left, right;
    int   data;
    int   height;

    public SBBST()
    {
        left = null;
        right = null;
        data = 0;
        height = 0;
    }

    public SBBST(int n)
    {

        left = null;
        right = null;
        data = n;
        height = 0;
    }
}

class SelfBalancingBinarySearchTree
{
    private SBBST root;

    public SelfBalancingBinarySearchTree()
    {
        root = null;
    }

    public boolean isEmpty()
    {
        return root == null;
    }

    public void clear()
    {
        root = null;
    }

    public void insert(int data)
    {
        root = insert(data, root);
    }

    private int height(SBBST t)
    {

        return t == null ? -1 : t.height;
    }

    private int max(int lhs, int rhs)
    {
        return lhs > rhs ? lhs : rhs;
    }

    private SBBST insert(int x, SBBST t)
    {
        if (t == null)
            t = new SBBST(x);
        else if (x < t.data)
        {
            t.left = insert(x, t.left);
            if (height(t.left) - height(t.right) == 2)
                if (x < t.left.data)
                    t = rotateWithLeftChild(t);
                else
                    t = doubleWithLeftChild(t);
        } else if (x > t.data)
        {
            t.right = insert(x, t.right);
            if (height(t.right) - height(t.left) == 2)
                if (x > t.right.data)
                    t = rotateWithRightChild(t);
                else
                    t = doubleWithRightChild(t);
        } else
            ;
        t.height = max(height(t.left), height(t.right)) + 1;
        return t;
    }

    private SBBST rotateWithLeftChild(SBBST k2)
    {
        System.out.println("Left Rotation Performed");
        SBBST k1 = k2.left;
        k2.left = k1.right;
        k1.right = k2;
        k2.height = max(height(k2.left), height(k2.right)) + 1;
        k1.height = max(height(k1.left), k2.height) + 1;
        return k1;
    }

    private SBBST rotateWithRightChild(SBBST k1)
    {
        //System.out.println("Right Rotation Performed");
        SBBST k2 = k1.right;
        k1.right = k2.left;
        k2.left = k1;
        k1.height = max(height(k1.left), height(k1.right)) + 1;
        k2.height = max(height(k2.right), k1.height) + 1;
        return k2;
    }

    private SBBST doubleWithLeftChild(SBBST k3)
    {
        System.out.println("Left Rotation Performed");
        k3.left = rotateWithRightChild(k3.left);
        return rotateWithLeftChild(k3);
    }

    private SBBST doubleWithRightChild(SBBST k1)
    {
        //System.out.println("Right Rotation Performed");
        k1.right = rotateWithLeftChild(k1.right);
        return rotateWithRightChild(k1);
    }

    public int countNodes()
    {
        return countNodes(root);
    }

    private int countNodes(SBBST r)
    {
        if (r == null)
            return 0;
        else
        {
            int l = 1;
            l += countNodes(r.left);
            l += countNodes(r.right);
            return l;
        }
    }

    public boolean search(int val)
    {
        return search(root, val);
    }

    private boolean search(SBBST r, int val)
    {
        boolean found = false;
        while ((r != null) && !found)
        {
            int rval = r.data;
            if (val < rval)
                r = r.left;
            else if (val > rval)
                r = r.right;
            else
            {
                found = true;
                break;
            }
            found = search(r, val);
        }
        return found;
    }

    public void inorder()
    {
        inorder(root);
    }

    private void inorder(SBBST r)
    {
        if (r != null)
        {
            inorder(r.left);
            System.out.print(r.data + " ");
            inorder(r.right);
        }
    }

    public void preorder()
    {

        preorder(root);
    }

    private void preorder(SBBST r)
    {
        if (r != null)
        {
            System.out.print(r.data + " ");
            preorder(r.left);
            preorder(r.right);
        }
    }

    public void postorder()
    {
        postorder(root);
    }

    private void postorder(SBBST r)
    {
        if (r != null)
        {
            postorder(r.left);
            postorder(r.right);
            System.out.print(r.data + " ");
        }
    }
}

public class Left_Rotation_BST
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);

        SelfBalancingBinarySearchTree sbbst = new SelfBalancingBinarySearchTree();
        System.out.println("Self Balancing Tree\n");

        System.out.println("Inset first 10 Elements");
        int N = 10;
        for (int i = 0; i < N; i++)
        {
            sbbst.insert(scan.nextInt());

            System.out.println("\nPre-order  :");
            sbbst.preorder();
            System.out.println("\nIn-order   :");
            sbbst.inorder();
            System.out.println("\nPost-order :");
            sbbst.postorder();

            System.out.println();
        }
        scan.close();
    }
}


Output:

Self Balancing Tree

Inset first 10 Elements
10

Pre-order  :
10 
In-order   :
10 
Post-order :
10 
9

Pre-order  :
10 9 
In-order   :
9 10 
Post-order :
9 10 
8
Left Rotation Performed

Pre-order  :
9 8 10 
In-order   :
8 9 10 
Post-order :
8 10 9 
7

Pre-order  :
9 8 7 10 
In-order   :
7 8 9 10 
Post-order :
7 8 10 9 
6
Left Rotation Performed

Pre-order  :
9 7 6 8 10 
In-order   :
6 7 8 9 10 
Post-order :
6 8 7 10 9 
5
Left Rotation Performed

Pre-order  :
7 6 5 9 8 10 
In-order   :
5 6 7 8 9 10 
Post-order :
5 6 8 10 9 7 
4
Left Rotation Performed

Pre-order  :
7 5 4 6 9 8 10 
In-order   :
4 5 6 7 8 9 10 
Post-order :
4 6 5 8 10 9 7 
3

Pre-order  :
7 5 4 3 6 9 8 10 
In-order   :
3 4 5 6 7 8 9 10 
Post-order :
3 4 6 5 8 10 9 7 
2
Left Rotation Performed

Pre-order  :
7 5 3 2 4 6 9 8 10 
In-order   :
2 3 4 5 6 7 8 9 10 
Post-order :
2 4 3 6 5 8 10 9 7 
1
Left Rotation Performed

Pre-order  :
7 3 2 1 5 4 6 9 8 10 
In-order   :
1 2 3 4 5 6 7 8 9 10 
Post-order :
1 2 4 6 5 3 8 10 9 7



More Java Programs:

















100+ Best Home Decoration Ideas For Christmas Day 2019 To Make Home Beautiful

Best gifts for Christmas Day | Greeting cards for Christmas Day | Gift your children a new gift on Christmas day This Christmas d...