Advertisement
Guest User

Untitled

a guest
Aug 10th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.34 KB | None | 0 0
  1. public void Remove (int valor){
  2.        
  3.         NodeTree aux,aux2;
  4.        
  5.         if(raiz == null){
  6.        
  7.             System.out.println("Arvore vazia.");
  8.        
  9.         }else{        
  10.             if(valor == raiz.getData()){
  11.                
  12.                if(raiz.getLeft() == null && raiz.getRight() == null){ // RAIZ É UMA FOLHA
  13.                    
  14.                    raiz = null;
  15.                
  16.                }else if(raiz.getLeft() != null && raiz.getRight() != null){// RAIZ É UM NO TERMINAL, TEM 2 FILHOS
  17.                    
  18.                    aux = raiz.getLeft();
  19.                    aux2 = raiz;
  20.                    while(aux.getRight() != null){
  21.                        
  22.                        aux2 = aux;
  23.                        aux = aux.getRight();
  24.                    }
  25.                    raiz.setData(aux.getData());
  26.                    if(aux.getLeft() != null){
  27.                        
  28.                        aux2.setLeft(aux.getLeft());
  29.                    }
  30.                    aux2.setRight(null);
  31.                    
  32.                 }else{ // RAIZ É UM NÓ NÃO TERMINAL , TEM 1 FILHO
  33.                     aux2 = raiz;
  34.                     if(raiz.getLeft() != null){
  35.                        
  36.                        aux = raiz.getLeft();
  37.                        while(aux.getRight() != null){
  38.  
  39.                            aux2 = aux;
  40.                            aux = aux.getRight();
  41.                        }
  42.                        raiz.setData(aux.getData());
  43.                        if(aux.getLeft() != null){
  44.  
  45.                            aux2.setLeft(aux.getLeft());
  46.                        }
  47.                        aux2.setRight(null);
  48.                        return;
  49.                     }// A RAIZ SÓ TEM UM FILHO A DIREITA
  50.                     aux = raiz.getRight();
  51.                     while(aux.getLeft() != null){
  52.  
  53.                         aux2 = aux;
  54.                         aux = aux.getLeft();
  55.                     }
  56.                     raiz.setData(aux.getData());
  57.                     if(aux.getRight() != null){
  58.  
  59.                         aux2.setRight(aux.getRight());
  60.                     }
  61.                     aux2.setLeft(null);
  62.                 }
  63.             }else if(valor < raiz.getData()){ // O valor que quero remover se encontra no lado esquerdo da raiz
  64.                
  65.                 aux = raiz.getLeft();
  66.                 aux2 = raiz;
  67.                
  68.                 while(aux.getData() != valor){
  69.                    
  70.                     if(aux.getLeft() != null && valor < aux.getData()){
  71.                        
  72.                         aux2 = aux;
  73.                         aux = aux.getLeft();
  74.                     }
  75.                     if(aux.getRight() != null && valor > aux.getData()){
  76.                        
  77.                         aux2 = aux;
  78.                         aux = aux.getRight();
  79.                     }
  80.                 }// ENCONTREI O NO QUE QUERO REMOVER
  81.                 if(aux.getLeft()== null  && aux.getRight() == null){ // O nó que preciso remover é uma folha
  82.                    
  83.                     if(aux2.getLeft() == aux){
  84.                        
  85.                         aux2.setLeft(null);
  86.                         return;
  87.                     }
  88.                     aux2.setRight(null);
  89.                    
  90.                 }else if(aux.getLeft() != null  && aux.getRight() != null){ // O nó que preciso remover tem 2 filhos
  91.                                                                             // PEGAR O ELEMENTO MAIOR DO LADO ESQUERDO DA RAIZ
  92.                     NodeTree maiorEsq = aux;
  93.                    
  94.                     while(maiorEsq.getRight() != null){
  95.                        
  96.                        aux2 = maiorEsq;
  97.                        maiorEsq = maiorEsq.getRight();
  98.                     }
  99.                     aux.setData(maiorEsq.getData());
  100.                     aux2.setRight(null);
  101.                    
  102.                 }else{ // O nó que preciso remover tem 1 filho
  103.                    
  104.                     if(aux.getLeft() != null){
  105.                        
  106.                         aux2.setLeft(aux.getLeft());
  107.                         return;
  108.                     }
  109.                     aux2.setRight(aux.getRight());
  110.                 }
  111.             }else{ // O valor que quero remover se encontra no lado direito da raiz
  112.                
  113.                 aux = raiz.getRight();
  114.                 aux2 = raiz;
  115.                
  116.                 while(aux.getData() != valor){
  117.                    
  118.                     if(aux.getLeft() != null && valor < aux.getData()){
  119.                        
  120.                         aux2 = aux;
  121.                         aux = aux.getLeft();
  122.                     }
  123.                     if(aux.getRight() != null && valor > aux.getData()){
  124.                        
  125.                         aux2 = aux;
  126.                         aux = aux.getRight();
  127.                     }
  128.                 }// ENCONTREI O NO QUE QUERO REMOVER
  129.                 if(aux.getLeft()== null  && aux.getRight() == null){ // O nó que preciso remover é uma folha, SEM FILHOS
  130.                    
  131.                     if(aux2.getLeft() == aux){
  132.                        
  133.                         aux2.setLeft(null);
  134.                         return;
  135.                     }
  136.                     aux2.setRight(null);
  137.                    
  138.                 }else if(aux.getLeft() != null  && aux.getRight() != null){ // O nó que preciso remover TEM 2 FILHOS
  139.                                                                             // PEGAR O ELEMENTO MENOR DO LADO DIREITO DA RAIZ
  140.                     NodeTree menorDir = aux;
  141.                    
  142.                     while(menorDir.getLeft() != null){
  143.                        
  144.                        aux2 = menorDir;
  145.                        menorDir = menorDir.getLeft();
  146.                     }
  147.                    
  148.                     aux.setData(menorDir.getData());
  149.                     aux2.setLeft(null);
  150.                    
  151.                 }else{ // O nó que preciso remover tem 1 filho
  152.                    
  153.                     if(aux.getLeft() != null){
  154.                        
  155.                         aux2.setLeft(aux.getLeft());
  156.                         return;
  157.                     }
  158.                     aux2.setRight(aux.getRight());
  159.                 }
  160.             }
  161.         }
  162.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement