Quantcast
Channel: Programação - GUJ
Viewing all articles
Browse latest Browse all 33093

Problema ao remover no de uma arvore AVL

$
0
0

@NetoChaves escreveu:

Olá estou implementando uma arvore AVL e estou tendo alguns problemas no método remover quando eu vou remover um no que possui dois filhos o no que eu quero remover ele é substituído pelo seu no filho da esquerda, Já quando eu vou remover um no folha(que não tem filhos) não acontece nada.
Exemplo: remover no 10 na seguinte arvore:

resultado:

ele apenas repete o do no da esquerda e quando é um no folha não acontece nada. se alguém puder me ajuda obrigado desde já.
quase esquecendo... esse é meu codigo de remover:

public boolean remover(int x) {
		if (raiz == null)
			return false;
		else {
			if (raiz.key == x) {
				AvlNo auxRaiz = new AvlNo(0);
				auxRaiz.esq = raiz;
				boolean result = removerAVL(auxRaiz, x, procurarpai(x));
				raiz = auxRaiz.esq;
				return result;
			} else {
				return removerAVL(raiz, x, procurarpai(x));
			}
		}
	}
	public int procurarMenor(AvlNo atual) {
		if (atual.esq == null)
			return atual.key;
		else
			return procurarMenor(atual.esq);
	}
	public boolean removerAVL(AvlNo atual, int x, AvlNo pai) {
		if (x < atual.key) {
			if (atual.esq != null)
				return removerAVL(atual.esq, x, pai);
			else
				return false;
		} else if (x > atual.key) {
			if (atual.dir != null)
				return removerAVL(atual.dir, x, pai);
			else
				return false;
		} else {
			if (atual.esq != null && atual.dir != null) {
				atual.key = procurarMenor(atual);
				removerAVL(atual.dir, atual.key, pai);
			} else if (pai.esq == atual.esq) {
				pai.esq = (atual.esq != null) ? atual.esq : atual.dir;
			} else if (pai.dir == atual.dir) {
				pai.dir = (atual.esq != null) ? atual.esq : atual.dir;
			}
			return true;
		}
	}

Mensagens: 1

Participantes: 1

Ler tópico completo


Viewing all articles
Browse latest Browse all 33093


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>