Un montón sesgo es una estructura de datos abstracta. Aunque Java no proporciona para una clase de árbol binario , el montón de inclinación puede ser pensado como un árbol de búsqueda de auto-organización binaria . La clase Heap Skew Java implementa la interfaz Comparable para listas de objetos SkewHeap se pueden clasificar fácilmente. Instrucciones
1
Escribir el esqueleto de la clase SkewHeap . Las variables de interés son el valor ( el valor del nodo ) y la izquierda y la derecha ( los hijos izquierdo y derecho ) . Las variables estáticas tmp y guión se utilizan para el espacio temporal de la fusión y de los métodos de impresión. El constructor inicializa el valor y deja a la izquierda y la derecha como nulo " " SkewHeap clase pública implementa Comparable { int valor ; . SkewHeap izquierda, derecha ; tmp LinkedList estática ; static int guión = 0 ; público ( int val) {valor SkewHeap = val ;} } " "
2
Usar el método compareTo como una forma de cumplir con la interfaz comparable y permiten listas de objetos SkewHeap se ordenen . El método compareTo debe devolver un número negativo , el número cero o positiva , dependiendo de cómo se deben ordenar los dos objetos. Lograr esto mediante la realización de una sustracción de los valores de los dos nodos " de tal manera que los nodos con valores inferiores se ordenan antes nodos de mayor valor ", "public int compareTo ( SkewHeap h ) { valor de retorno - h.value ; }". "
3
Componer el método de cortar, un importante método utilizado por fusión . Cuando se realiza una fusión, ambas pilas se cortan aparte por el lado derecho . . El método chop chop que realiza y agrega los subheaps restantes a la lista tmp " " chop public void () { SkewHeap r = derecha , derecha = null; if ( r = null !) R.chop (); tmp.addLast ( this); } " "
4
Crear el método de combinación. Los métodos de inserción y removeHead tanto el uso de combinación para cumplir con su tarea. El método de combinación tajará ambos montones para ser fusionadas , que almacena todos los subheaps en tmp.
5
Lograr la clasificación de la lista enlazada tmp y combinar los subheaps quitando los dos últimos montones de la lista. Añadir uno como el hijo derecho del otro, intercambiar los hijos izquierdo y derecho y agregar el nuevo montón al final de la lista . De esta manera , subheaps picados se vuelven a montar en un único montón equilibrada . Nodos izquierda siempre se garantiza que sea menos de los nodos correctos y nodos secundarios tienen un valor superior a los nodos primarios " " público SkewHeap merge ( SkewHeap h ) {//Cortar los nodos por el camino correcto tmp = new LinkedList (). ; chop (); h.chop (); //Ordenar los nodos Collections.sort ( tmp ) ; //Combinar los subheaps while ( tmp.size ()> 1 ) { a = SkewHeap tmp.removeLast (); SkewHeap b = tmp.removeLast (); b.right = b.left ; b.left = a; tmp.addLast ( b ) ; } return tmp.getFirst (); } " "
6
Escriba el método removeHead . Esto eliminará el nodo principal y fusionar los niños montones izquierda y derecha ", " público SkewHeap removeHead () { if ( izquierda == null && derecha == null) return null ; . Else if return ( izquierda == null) derecho ; más if ( derecha == null ) return izquierda ; left.merge vuelta más ( derecha) ;} " "
7
Formular el método de impresión . Este método es importante para la depuración, como depuradores con frecuencia no tienen las instalaciones para ver las estructuras de datos anidadas como este montón de inclinación. Es recursivo y guiones correctamente " " print public void () {for (int i = 0 ; . I System.out.println (valor) ; guión + + , y si (izquierda = null) {for (int i = 0 ; ! System i . out.println ( " left.print () ;} if ( derecha = null) {for (int i = 0 ; i System.out.println ( " - > ") ; right.print () ;} guión - - ;} " "