Um monte de inclinação é uma estrutura de dados abstracta. Embora Java não prevê uma classe de árvore binária , a pilha de inclinação pode ser pensado como uma árvore binária de busca de auto-organização . A classe Java Torcer Heap implementa a interface Comparable assim listas de objetos SkewHeap podem ser classificados facilmente. Instruções
1
Escreva o esqueleto da classe SkewHeap . As variáveis de interesse são de valor ( o valor do nó ) e à esquerda e à direita ( o filhos esquerdo e direito ) . O tmp e variáveis estáticas travessão são usados para espaço temporário nos métodos de mesclagem e imprimir . O construtor inicializa valor e deixa esquerda e direita como null " " public class SkewHeap implementa Comparable {value int; . SkewHeap esquerda, direita ; estática LinkedList tmp ; int travessão = 0 estática; SkewHeap (int val) {value público = val ;} } " "
2
Use o método compareTo , como forma de cumprir a interface Comparable e permitir listas de objetos SkewHeap a ser classificado. O método compareTo deve retornar um número negativo, zero ou número positivo , dependendo de como os dois objetos devem ser classificados. Alcançar esta realizando uma subtração dos valores dos dois nós ' de tal forma que os nós com valores menores são ordenados antes de nós de maior valor " " public int compareTo ( SkewHeap h ) { valor de retorno - h.value ; } ". "
3
Componha o método chop, um importante método usado por mesclagem. Quando uma fusão é realizada , os dois montes são cortados em pedaços para o lado direito . O método costeleta costeleta que executa e adiciona os subheaps restantes à lista tmp " " costeleta public void () { SkewHeap r = direita; . Direito = null; if ( r = null !) R.chop (); tmp.addLast ( this); } " "
4
Criar o método de mesclagem. A inserção e métodos RemoveHead tanto para uso de mesclagem para realizar sua tarefa . O método merge vai cortar ambos os montes a ser incorporada, que armazena todos os subheaps em tmp.
5
realizar a classificação da lista ligada tmp e combinando as subheaps removendo os dois últimos montes da lista. Adicionar um como o filho direito do outro, trocar a crianças direita e esquerda e adicione a pilha de volta para o final da lista . Desta forma , subheaps picadas são reagrupados em uma única pilha equilibrada . Nós esquerda são sempre garantia de ser menos do que os nós certos, e nós filhos têm um valor maior do que nós pai " " merge SkewHeap público ( SkewHeap h ) {//Pique os nós para baixo o direito tmp caminho = new LinkedList (). ; cortar (); h.chop ( ) //Ordenar os nós Collections.sort ( tmp ) //Mesclar as subheaps while ( tmp.size () > 1) { SkewHeap a = tmp.removeLast (); SkewHeap b = tmp.removeLast (); b.right = b.left ; b.left = a; tmp.addLast ( b );} retornar tmp.getFirst ();} " "
6
Escreva o método RemoveHead . Isto irá remover o nó principal e mesclar os montes filho esquerdo e direito " " público SkewHeap RemoveHead () {if (esquerda == null && direita == null ) return null ; . Else if ( esquerda == null ) return direito , senão if ( direita == null ) return esquerda ; left.merge retorno outra (direita) ;} " "
7
Formular o método de impressão. Este método é importante para a depuração, como depuradores muitas vezes não têm as facilidades para visualizar estruturas de dados aninhadas como este montão de inclinação . É recursivo e travessões corretamente " " print public void () { for (int i = 0; . I System.out.println ( valor ); travessão + +; ! If ( esquerda = null) { for (int i = 0; System i . out.println ( " left.print ();} if ( direita = null) { for (int i = 0; i System.out.println ( " - > "); right.print ();} travessão - - ;} " "