Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 6.15 KB | None | 0 0
  1.     public void splay( No filho ) {
  2.        
  3.         while ( !filho.equals( raiz ) ) {
  4.            
  5.             No pai = filho.getPai();
  6.             No avo = pai.getPai();
  7.            
  8.             // Se o avo for null, então o pai é a raiz. zig simples.
  9.             if ( avo == null ) {
  10.                 // Se for o filho da esquerda é zig_Right
  11.                 if ( filho.equals( pai.getEsquerda() ) ) {
  12.                     zig_Right( filho );
  13.                 // Se não, é zig_Left
  14.                 } else {
  15.                     zig_Left( filho );
  16.                 }
  17.             // Se o avo não for null, entao é zig duplo.
  18.                 // Se for filho da esquerda:
  19.             } else if ( filho.equals( pai.getEsquerda() ) ) {
  20.                 // Se for neto da esquerda, entao é zig_Zig_Right
  21.                 if ( pai.equals( avo.getEsquerda() ) ) {
  22.                     zig_Zig_Right( filho );
  23.                 // Se não é zig_Zag_Left
  24.                 } else {
  25.                     zig_Zag_Left( filho );
  26.                 }
  27.                 // Se nao for filho da esquerda, é filho da direita:
  28.             } else {
  29.                 // Se for neto da direita, entao é zig_Zig_Left
  30.                 if ( pai.equals( avo.getDireita() ) ) {
  31.                     zig_Zig_Left( filho );
  32.                 // Se não é zig_Zag_Right
  33.                 } else {
  34.                     zig_Zag_Right( filho );
  35.                 }
  36.             }
  37.         }
  38.     }
  39.    
  40.     public void zig_Right( No filho ) {
  41.         No pai = filho.getPai();
  42.         No B = filho.getDireita();
  43.    
  44.         // Muda o pai de filho
  45.         filho.setPai( null );
  46.         // Muda o filho Direito de filho
  47.         filho.setDireita( pai );
  48.         // Muda o pai de pai
  49.         pai.setPai( filho );
  50.        
  51.         // Muda o filho Esquerdo de pai
  52.         pai.setEsquerda( B );
  53.         // Muda o pai de B
  54.         if ( B != null )
  55.             B.setPai( pai );
  56.        
  57.         // atualiza a raiz;
  58.         raiz = filho;
  59.        
  60.     }
  61.    
  62.     public void zig_Left( No filho ) {
  63.         No pai = filho.getPai();
  64.         No B = filho.getEsquerda();
  65.        
  66.         // Muda o pai de filho
  67.         filho.setPai( null );
  68.         // Muda o filho Esquerdo de filho
  69.         filho.setEsquerda( pai );
  70.         // Muda o pai de pai
  71.         pai.setPai( filho );
  72.        
  73.         // Muda o filho Direito de pai
  74.         pai.setDireita( B );
  75.         // Muda o pai de B
  76.         if ( B != null )
  77.             B.setPai( pai );
  78.        
  79.         // atualiza a raiz;
  80.         raiz = filho;
  81.     }
  82.    
  83.     public void zig_Zig_Right( No filho ) {
  84.         // Guardo o Pai, Avo e os Filhos da direita de filho e de pai
  85.         No pai = filho.getPai();
  86.         No avo = pai.getPai();
  87.         No B = filho.getDireita();
  88.         No C = pai.getDireita();
  89.         No bisavo = avo.getPai();
  90.        
  91.         // Mudo o pai e o filho direito de filho
  92.         filho.setPai( bisavo );
  93.         filho.setDireita( pai );
  94.        
  95.         // Mudo o pai e os filhos de pai
  96.         pai.setPai( filho );
  97.         pai.setEsquerda( B );
  98.         pai.setDireita( avo );
  99.        
  100.         // Mudo o pai e o filho esquerda de avo
  101.         avo.setPai( pai );
  102.         avo.setEsquerda( C );
  103.        
  104.         // Atualizo os pais de B e C
  105.         if ( B != null )
  106.             B.setPai( pai );
  107.         if ( C != null )
  108.             C.setPai( avo );
  109.        
  110.         // Se tiver bisavo:
  111.         if ( bisavo != null ) {
  112.             // Se o avo for o filho Esquerdo de Bisavo:
  113.             if ( bisavo.getEsquerda().equals( avo ) ) {
  114.                 bisavo.setEsquerda( filho );
  115.             // Se nao, o avo é filho Direito do Bisavo:
  116.             } else {
  117.                 bisavo.setDireita( filho );
  118.             }
  119.         // Se não tiver bisavo, é porque o avo era a raiz. Atualiz a raiz:
  120.         } else {
  121.             raiz = filho;
  122.         }
  123.     }
  124.    
  125.     public void zig_Zig_Left( No filho ) {
  126.         // Guardo o Pai, Avo e os Filhos da direita de filho e de pai
  127.         No pai = filho.getPai();
  128.         No avo = pai.getPai();
  129.         No bisavo = avo.getPai();
  130.         No B = pai.getEsquerda();
  131.         No C = filho.getEsquerda();
  132.        
  133.         // Mudo o pai e o filho esquerda de filho
  134.         filho.setPai( bisavo );
  135.         filho.setEsquerda( pai );
  136.        
  137.         // Mudo o pai e os filhos de pai
  138.         pai.setPai( filho );
  139.         pai.setEsquerda( avo );
  140.         pai.setDireita( C );
  141.  
  142.         // Mudo o pai e o filho direita de avo
  143.         avo.setPai( pai );
  144.         avo.setDireita( B );
  145.        
  146.         // Atualizo os pais de B e C
  147.         if ( C != null )
  148.             C.setPai( pai );
  149.         if ( B != null )
  150.             B.setPai( avo );
  151.        
  152.         // Se tiver bisavo:
  153.         if ( bisavo != null ) {
  154.             // Se o avo for o filho Esquerdo de Bisavo:
  155.             if ( bisavo.getEsquerda().equals( avo ) ) {
  156.                 bisavo.setEsquerda( filho );
  157.             // Se nao, o avo é filho Direito do Bisavo:
  158.             } else {
  159.                 bisavo.setDireita( filho );
  160.             }
  161.         // Se não tiver bisavo, é porque o avo era a raiz. Atualiz a raiz:
  162.         } else {
  163.             raiz = filho;
  164.         }
  165.     }
  166.    
  167.     public void zig_Zag_Right( No filho ) {
  168.         // Guardo o Pai, Avo e os Filhos da direita de filho e de pai
  169.         No pai = filho.getPai();
  170.         No avo = pai.getPai();
  171.         No bisavo = avo.getPai();
  172.         No B = filho.getEsquerda();
  173.         No C = filho.getDireita();
  174.  
  175.         // Muda o pai e os filhos de filho
  176.         filho.setPai( avo.getPai() );
  177.         filho.setEsquerda( pai );
  178.         filho.setDireita( avo );
  179.        
  180.         //  Muda o pai e o filho direita de pai
  181.         pai.setPai( filho );
  182.         pai.setDireita( B );
  183.        
  184.         // Mudo o pai e o filho esquerda de avo
  185.         avo.setPai( filho );
  186.         avo.setEsquerda( C );
  187.        
  188.         // Atualizo os pais de B e C
  189.         if ( B != null )
  190.             B.setPai( pai );
  191.         if ( C != null )
  192.             C.setPai( avo );
  193.        
  194.         // Se tiver bisavo:
  195.         if ( bisavo != null ) {
  196.             // Se o avo for o filho Esquerdo de Bisavo:
  197.             if ( avo.equals( bisavo.getEsquerda() ) ) {
  198.                 bisavo.setEsquerda( filho );
  199.             // Se nao, o avo é filho Direito do Bisavo:
  200.             } else {
  201.                 bisavo.setDireita( filho );
  202.             }
  203.         // Se não tiver bisavo, é porque o avo era a raiz. Atualiz a raiz:
  204.         } else {
  205.             raiz = filho;
  206.         }
  207.     }
  208.    
  209.     public void zig_Zag_Left( No filho ) {
  210.         // Guardo o Pai, Avo e os Filhos da direita de filho e de pai
  211.         No pai = filho.getPai();
  212.         No avo = pai.getPai();
  213.         No bisavo = avo.getPai();
  214.         No B = filho.getEsquerda();
  215.         No C = filho.getDireita();
  216.        
  217.         // Muda o pai e os filhos de filho
  218.         filho.setPai( avo.getPai() );
  219.         filho.setEsquerda( avo );
  220.         filho.setDireita( pai );
  221.        
  222.         // Mudo o pai e o filho esquerda de pai
  223.         pai.setPai( filho );
  224.         pai.setEsquerda( C );
  225.        
  226.         // Mudo o pai e o filho direita de avo
  227.         avo.setPai( filho );
  228.         avo.setDireita( B );
  229.        
  230.         // Atualizo os pais de B e C
  231.         if ( C != null )
  232.             C.setPai( pai );
  233.         if ( B != null )
  234.             B.setPai( avo );
  235.        
  236.         // Se tiver bisavo:
  237.         if ( bisavo != null ) {
  238.             // Se o avo for o filho Esquerdo de Bisavo:
  239.             if ( avo.equals( bisavo.getEsquerda() ) ) {
  240.                 bisavo.setEsquerda( filho );
  241.             // Se nao, o avo é filho Direito do Bisavo:
  242.             } else {
  243.                 bisavo.setDireita( filho );
  244.             }
  245.         // Se não tiver bisavo, é porque o avo era a raiz. Atualiz a raiz:
  246.         } else {
  247.             raiz = filho;
  248.         }
  249.     }
  250.  
  251. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement