Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void Remove (int valor){
- NodeTree aux,aux2;
- if(raiz == null){
- System.out.println("Arvore vazia.");
- }else{
- if(valor == raiz.getData()){
- if(raiz.getLeft() == null && raiz.getRight() == null){ // RAIZ É UMA FOLHA
- raiz = null;
- }else if(raiz.getLeft() != null && raiz.getRight() != null){// RAIZ É UM NO TERMINAL, TEM 2 FILHOS
- aux = raiz.getLeft();
- aux2 = raiz;
- while(aux.getRight() != null){
- aux2 = aux;
- aux = aux.getRight();
- }
- raiz.setData(aux.getData());
- if(aux.getLeft() != null){
- aux2.setLeft(aux.getLeft());
- }
- aux2.setRight(null);
- }else{ // RAIZ É UM NÓ NÃO TERMINAL , TEM 1 FILHO
- aux2 = raiz;
- if(raiz.getLeft() != null){
- aux = raiz.getLeft();
- while(aux.getRight() != null){
- aux2 = aux;
- aux = aux.getRight();
- }
- raiz.setData(aux.getData());
- if(aux.getLeft() != null){
- aux2.setLeft(aux.getLeft());
- }
- aux2.setRight(null);
- return;
- }// A RAIZ SÓ TEM UM FILHO A DIREITA
- aux = raiz.getRight();
- while(aux.getLeft() != null){
- aux2 = aux;
- aux = aux.getLeft();
- }
- raiz.setData(aux.getData());
- if(aux.getRight() != null){
- aux2.setRight(aux.getRight());
- }
- aux2.setLeft(null);
- }
- }else if(valor < raiz.getData()){ // O valor que quero remover se encontra no lado esquerdo da raiz
- aux = raiz.getLeft();
- aux2 = raiz;
- while(aux.getData() != valor){
- if(aux.getLeft() != null && valor < aux.getData()){
- aux2 = aux;
- aux = aux.getLeft();
- }
- if(aux.getRight() != null && valor > aux.getData()){
- aux2 = aux;
- aux = aux.getRight();
- }
- }// ENCONTREI O NO QUE QUERO REMOVER
- if(aux.getLeft()== null && aux.getRight() == null){ // O nó que preciso remover é uma folha
- if(aux2.getLeft() == aux){
- aux2.setLeft(null);
- return;
- }
- aux2.setRight(null);
- }else if(aux.getLeft() != null && aux.getRight() != null){ // O nó que preciso remover tem 2 filhos
- // PEGAR O ELEMENTO MAIOR DO LADO ESQUERDO DA RAIZ
- NodeTree maiorEsq = aux;
- while(maiorEsq.getRight() != null){
- aux2 = maiorEsq;
- maiorEsq = maiorEsq.getRight();
- }
- aux.setData(maiorEsq.getData());
- aux2.setRight(null);
- }else{ // O nó que preciso remover tem 1 filho
- if(aux.getLeft() != null){
- aux2.setLeft(aux.getLeft());
- return;
- }
- aux2.setRight(aux.getRight());
- }
- }else{ // O valor que quero remover se encontra no lado direito da raiz
- aux = raiz.getRight();
- aux2 = raiz;
- while(aux.getData() != valor){
- if(aux.getLeft() != null && valor < aux.getData()){
- aux2 = aux;
- aux = aux.getLeft();
- }
- if(aux.getRight() != null && valor > aux.getData()){
- aux2 = aux;
- aux = aux.getRight();
- }
- }// ENCONTREI O NO QUE QUERO REMOVER
- if(aux.getLeft()== null && aux.getRight() == null){ // O nó que preciso remover é uma folha, SEM FILHOS
- if(aux2.getLeft() == aux){
- aux2.setLeft(null);
- return;
- }
- aux2.setRight(null);
- }else if(aux.getLeft() != null && aux.getRight() != null){ // O nó que preciso remover TEM 2 FILHOS
- // PEGAR O ELEMENTO MENOR DO LADO DIREITO DA RAIZ
- NodeTree menorDir = aux;
- while(menorDir.getLeft() != null){
- aux2 = menorDir;
- menorDir = menorDir.getLeft();
- }
- aux.setData(menorDir.getData());
- aux2.setLeft(null);
- }else{ // O nó que preciso remover tem 1 filho
- if(aux.getLeft() != null){
- aux2.setLeft(aux.getLeft());
- return;
- }
- aux2.setRight(aux.getRight());
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement