Problema ao remover no de uma arvore AVL

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; } }