All pastes #383587 Raw Edit

Mine

public text v1 · immutable
·published 2007-03-06 14:15 UTC
rendered paste body
package lab1;

import lab1paket.CollectionWithGet;
import datastructures.*;
import lab1paket.*;

/**
 * 
 * @author Ola Ederborn
 * @author Tomas Vestelind
 *
 * @param <E>
 */
public class SplayTree<E extends Comparable<? super E>> extends BinarySearchTree<E>
             implements CollectionWithGet<E>{
	
	public SplayTree(){
		super();
	}
	
	public Entry find(E element, Entry t){
		if(t == null){			
			return t;
		}
		else if (element.compareTo( t.element ) == 0 ){
			splay(t);
			return t;
		}
	    else if (element.compareTo( t.element ) < 0 ){
	    	if(t.left == null){
	    		splay(t);
	    		return null;
	    	}
	    	else
	    		return find( element, t.left );
	    }
		else{
			if(t.right == null){
				splay(t);
				return null;
			}
			else
				return find( element, t.right );
		}
	}
	
	public void splay(Entry t){
		while(t != root)
			switch(findOutSplay(t)){
			case 1:
				zag(t);
				break;
			case 2:
				zig(t);
				break;
			case 3:
				zagzag(t);
				break;
			case 4:
				zigzag(t);
				break;
			case 5:
				zigzig(t);
				break;
			case 6:
				zagzig(t);
				break;
		}
	}
	
	private int findOutSplay(Entry t){
		if(t.parent.parent == null && t.parent.left == t)
			return 1;
		else if(t.parent.parent == null && t.parent.right == t)
			return 2;
		else if(t.parent.parent.left == t.parent && t.parent.left == t)
			return 3;
		else if(t.parent.parent.left == t.parent && t.parent.right == t)
			return 4;
		else if(t.parent.parent.right == t.parent && t.parent.right == t)
			return 5;
		else if(t.parent.parent.right == t.parent && t.parent.left == t)
			return 6;
		else
			return 0;
	}
	
	private void zig(Entry t){
		Entry x,y;
		x = t;
		y = t.parent;
		
		y.right = x.left;
		if(y.right != null)
			y.right.parent = y;
		
		x.left = y;
		y.parent = x;
		x.parent = null;
		
		root = x;
	}
	
	private void zag(Entry t){
		Entry x,y;
		x = t;
		y = t.parent;
		
		y.left = x.right;
		if(y.left != null)
			y.left.parent = y;
		
		x.right = y;
		y.parent = x;
		x.parent = null;
		
		root = x;
	}
	
	private void zigzig(Entry t){
		Entry x,y,z;
		x = t;
		y = t.parent;
		z = t.parent.parent;
		
		if(z.parent != null){
			if(z.parent.left == z)
				z.parent.left = x;
			else if(z.parent.right == z)
				z.parent.right = x;
		}
		else
			root = x;
		
		x.parent = z.parent;
		z.right = y.left;
		z.parent = y;
		if(z.right != null)
			z.right.parent = z;
		
		y.left = z;
		y.right = x.left;
		if(y.right != null)
			y.right.parent = y;
		
		y.parent = x;
		x.left = y;
	}
	
	private void zagzag(Entry t){
		Entry x,y,z;
		x = t;
		y = t.parent;
		z = t.parent.parent;
		
		if(z.parent != null){
			if(z.parent.left == z)
				z.parent.left = x;
			else if(z.parent.right == z)
				z.parent.right = x;
		}
		else
			root = x;
		
		x.parent = z.parent;
		z.left = y.right;
		z.parent = y;
		if(z.left != null)
			z.left.parent = z;
		
		y.right = z;
		y.left = x.right;
		if(y.left != null)
			y.left.parent = y;
		
		y.parent = x;
		x.right = y;
	}
	
	private void zagzig(Entry t){
		Entry x,y,z;
		x = t;
		y = t.parent;
		z = t.parent.parent;
		
		if(z.parent != null){
			if(z.parent.left == z)
				z.parent.left = x;
			else if(z.parent.right == z)
				z.parent.right = x;
		}
		else
			root = x;
		
		z.right = x.left;
		if(z.right != null)
			z.right.parent = z;
		
		y.left = x.right;
		if(y.left != null)
			y.left.parent = y;
		
		x.parent = z.parent;
		x.left = z;
		x.right = y;
		y.parent = x;
		z.parent = x;
	}
	
	private void zigzag(Entry t){
		Entry x,y,z;
		x = t;
		y = t.parent;
		z = t.parent.parent;
		
		if(z.parent != null){
			if(z.parent.left == z)
				z.parent.left = x;
			else if(z.parent.right == z)
				z.parent.right = x;
		}
		else
			root = x;
		
		z.left = x.right;
		if(z.left != null)
			z.left.parent = z;
		
		y.right = x.left;
		if(y.right != null)
			y.right.parent = y;
		
		x.parent = z.parent;
		x.right = z;
		x.left = y;
		y.parent = x;
		z.parent = x;
	}
	
	public boolean contains( E elem ) {
        return find( elem, root ) != null;
	}
	
	public E get(E element){
		Entry t;
		t = find(element, root);
		if(t == null)
			return null;
		else
			return t.element;
	}
}