Java Design patterns
This commit is contained in:
@@ -1,22 +0,0 @@
|
||||
package javadevjournal.ds.avl;
|
||||
|
||||
class AVLNode{
|
||||
|
||||
AVLNode left, right;
|
||||
int data;
|
||||
int height;
|
||||
|
||||
public AVLNode(){
|
||||
left = null;
|
||||
right = null;
|
||||
data = 0;
|
||||
height = 0;
|
||||
}
|
||||
|
||||
public AVLNode(int n){
|
||||
left = null;
|
||||
right = null;
|
||||
data = n;
|
||||
height = 0;
|
||||
}
|
||||
}
|
||||
@@ -1,195 +0,0 @@
|
||||
package javadevjournal.ds.avl;
|
||||
|
||||
class AVLTree{
|
||||
private AVLNode root;
|
||||
public AVLTree(){
|
||||
root = null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param avlNode
|
||||
* @return
|
||||
*/
|
||||
private int height(AVLNode avlNode ){
|
||||
return avlNode == null ? -1 : avlNode.height;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param lHeight
|
||||
* @param rHeight
|
||||
* @return
|
||||
*/
|
||||
private int max(int lHeight, int rHeight){
|
||||
return lHeight > rHeight ? lHeight : rHeight;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
*/
|
||||
public void insert(int data){
|
||||
root = insert(data, root);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
* @param avlNode
|
||||
* @return
|
||||
*/
|
||||
private AVLNode insert(int data, AVLNode avlNode)
|
||||
{
|
||||
if (avlNode == null)
|
||||
avlNode = new AVLNode(data);
|
||||
else if (data < avlNode.data){
|
||||
avlNode.left = insert( data, avlNode.left );
|
||||
if( height( avlNode.left ) - height( avlNode.right ) == 2 )
|
||||
if( data < avlNode.left.data )
|
||||
avlNode = leftRotation( avlNode );
|
||||
else
|
||||
avlNode = leftRightRotation( avlNode );
|
||||
}
|
||||
else if( data > avlNode.data ){
|
||||
avlNode.right = insert( data, avlNode.right );
|
||||
if( height( avlNode.right ) - height( avlNode.left ) == 2 )
|
||||
if( data > avlNode.right.data)
|
||||
avlNode = rightRotation( avlNode );
|
||||
else
|
||||
avlNode = rightLeftRotation( avlNode );
|
||||
}
|
||||
else
|
||||
; // Duplicate; do nothing
|
||||
avlNode.height = max( height( avlNode.left ), height( avlNode.right ) ) + 1;
|
||||
return avlNode;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param avlNode
|
||||
* @return
|
||||
*/
|
||||
private AVLNode leftRotation(AVLNode avlNode){
|
||||
AVLNode k1 = avlNode.left;
|
||||
avlNode.left = k1.right;
|
||||
k1.right = avlNode;
|
||||
avlNode.height = max( height( avlNode.left ), height( avlNode.right ) ) + 1;
|
||||
k1.height = max( height( k1.left ), avlNode.height ) + 1;
|
||||
return k1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param avlNode
|
||||
* @return
|
||||
*/
|
||||
private AVLNode rightRotation(AVLNode avlNode){
|
||||
AVLNode node = avlNode.right;
|
||||
avlNode.right = node.left;
|
||||
node.left = avlNode;
|
||||
avlNode.height = max( height( avlNode.left ), height( avlNode.right ) ) + 1;
|
||||
node.height = max( height( node.right ), avlNode.height ) + 1;
|
||||
return node;
|
||||
}
|
||||
/**
|
||||
* left-right rotation
|
||||
* @param avlNode
|
||||
* @return
|
||||
*/
|
||||
private AVLNode leftRightRotation(AVLNode avlNode){
|
||||
avlNode.left = rightRotation( avlNode.left );
|
||||
return leftRotation( avlNode );
|
||||
}
|
||||
|
||||
/**
|
||||
* right-left rotation
|
||||
* @param avlNode
|
||||
* @return
|
||||
*/
|
||||
private AVLNode rightLeftRotation(AVLNode avlNode)
|
||||
{
|
||||
avlNode.right = leftRotation( avlNode.right );
|
||||
return rightRotation( avlNode );
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int countNodes(){
|
||||
return countNodes(root);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param avlNode
|
||||
* @return
|
||||
*/
|
||||
private int countNodes(AVLNode avlNode){
|
||||
if (avlNode == null)
|
||||
return 0;
|
||||
else{
|
||||
int l = 1;
|
||||
l += countNodes(avlNode.left);
|
||||
l += countNodes(avlNode.right);
|
||||
return l;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
public boolean search(int data){
|
||||
return search(root, data);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param avlNode
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
private boolean search(AVLNode avlNode, int data){
|
||||
boolean found = false;
|
||||
while ((avlNode != null) && !found)
|
||||
{
|
||||
int rval = avlNode.data;
|
||||
if (data < rval)
|
||||
avlNode = avlNode.left;
|
||||
else if (data > rval)
|
||||
avlNode = avlNode.right;
|
||||
else
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
found = search(avlNode, data);
|
||||
}
|
||||
return found;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void inorder(){
|
||||
inorder(root);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param avlNode
|
||||
*/
|
||||
private void inorder(AVLNode avlNode){
|
||||
if (avlNode != null){
|
||||
inorder(avlNode.left);
|
||||
System.out.print(avlNode.data +" ");
|
||||
inorder(avlNode.right);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
package javadevjournal.ds.avl;
|
||||
|
||||
import java.util.Scanner;
|
||||
|
||||
public class AVLTreeHelper{
|
||||
public static void main(String[] args){
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
AVLTree avlTree = new AVLTree();
|
||||
|
||||
char ch;
|
||||
do{
|
||||
System.out.println("\nAVLTree Operations\n");
|
||||
System.out.println("1. insert ");
|
||||
System.out.println("2. search");
|
||||
System.out.println("3. count nodes");
|
||||
int choice = scanner.nextInt();
|
||||
switch (choice)
|
||||
{
|
||||
case 1 :
|
||||
System.out.println("Enter integer element to insert");
|
||||
avlTree.insert( scanner.nextInt() );
|
||||
break;
|
||||
case 2 :
|
||||
System.out.println("Enter integer element to search");
|
||||
System.out.println("Search result : "+ avlTree.search( scanner.nextInt()));
|
||||
break;
|
||||
case 3 :
|
||||
System.out.println("Nodes = "+ avlTree.countNodes());
|
||||
break;
|
||||
default :
|
||||
System.out.println("Wrong Entry \n ");
|
||||
break;
|
||||
}
|
||||
|
||||
System.out.print("\nIn order : ");
|
||||
avlTree.inorder();
|
||||
|
||||
System.out.println("\nDo you want to continue (Type y or n) \n");
|
||||
ch = scanner.next().charAt(0);
|
||||
} while (ch == 'Y'|| ch == 'y');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user