Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void splay(No no) {
- while (!raiz.equals(no)) {
- int zigType = whichZig(no, no.getPai(), no.getPai().getPai());
- switch (zigType) {
- case 1:
- Zig_right(no, no.getPai());
- break;
- case 2:
- Zig_left(no, no.getPai());
- break;
- case 3:
- ZigZig_right(no, no.getPai(), no.getPai().getPai());
- break;
- case 4:
- ZigZig_left(no, no.getPai(), no.getPai().getPai());
- break;
- case 5:
- ZigZag_right(no, no.getPai(), no.getPai().getPai());
- break;
- case 6:
- ZigZag_left(no, no.getPai(), no.getPai().getPai());
- break;
- // default :
- // return;
- }
- }
- }
- /*
- *
- * -1 - Condicoes Base Falhas
- * 0 - Raiz
- * 1 - Zig Right
- * 2 - Zig Left
- * 3 - ZigZig Right
- * 4 - ZigZig left
- * 5 - ZigZag Right
- * 6 - ZigZag Left
- */
- private int whichZig(No no1, No no2, No no3) {
- // Condicoes Bases No1 Filho de No2 e No2 Filho de No3
- if (!no1.equals(no2.getEsquerda()) && !no1.equals(no2.getDireita()))
- return -1;
- if (no3 != null && !no2.equals(no3.getEsquerda()) && !no2.equals(no3.getDireita()))
- return -1;
- // Verifica Zig
- if (no3 == null) {
- // Eh Zig
- if (no1.equals(no2.getEsquerda()))
- return 1;
- else
- return 2;
- }
- // Verifica Rotacoes Duplas
- if (no1.equals(no2.getEsquerda())) {
- if (no2.equals(no3.getEsquerda()))
- return 3;
- else
- return 5;
- } else {
- if (no2.equals(no3.getDireita()))
- return 4;
- else
- return 6;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement