Árvore Binária

Alguém tem algum exemplo de árvore binária com função inserir, buscar e remover?
Estou fazendo um trabalho da faculdade, consegui implementar o inserir e buscar, mas estou meio perdido para o remover.
Segue o algoritmo que eu criei:

public class Arvore {

    private class No {

        int valor;
        No direita;
        No esquerda;
    }

    private No raiz;
    private int tamanho = 0;

    public boolean insere(int valor) {
        No buscado = buscaInterna(valor, raiz);
        if (buscado != null) {
            if (buscado.valor != valor) {
                No novo = new No();
                novo.valor = valor;
                if (buscado.valor == valor) {
                    return false;
                }
                if (buscado.valor < valor) {
                    buscado.direita = novo;
                }
                else {
                    buscado.esquerda = novo;
                }
                tamanho++;
                return true;
            }
            return false;
        }
        No novo = new No();
        novo.valor = valor;
        raiz = novo;
        tamanho++;
        return true;
    }
    
    public boolean busca(int valor) {
    	No temp = buscaInterna(valor, raiz);
    	if (temp != null)
    		if (temp.valor == valor)
    			return true;
    	return false;
    }
    
    
    public No buscaInterna(int valor, No atual) {
        if (atual != null) {
        	if (valor == atual.valor)
        		return atual;
        }
        else
            return null;

        if (valor > atual.valor) {
            if (atual.direita != null) {
                return buscaInterna(valor, atual.direita);
            }
            else {
                return atual;
            }
        }

        if (valor < atual.valor) {
            if (atual.esquerda != null) {
            	return  buscaInterna(valor, atual.esquerda);
            } else {
                return atual;
            }
        }

        return null;
    }


    public int getTamanho() {
        return this.tamanho;
    }
}

Agradeço a todos que colaborarem.

Poste antigo, mas nunca se sabe

http://pt.wikipedia.org/wiki/%C3%81rvore_de_busca_bin%C3%A1ria

http://www2.mat.ua.pt/lap/General/A0708/Folhas_Exerc/ArvoreBinaria.pdf

http://www.foxnet.com.br/portal2/?p=71

public No remover(No node, int valor) {
		System.out.println(" Corendo No " + node.valor);
		if (node == null) {
			System.out.println(" Arvore vazia ");
		}
		if (valor < node.valor) {
			node.esquerda = remover(node.esquerda, valor);
		} else if (valor > node.valor) {
			node.direita = remover(node.direita, valor);
		} else if (node.esquerda != null && node.direita != null) // 2 filhos
		{
			System.out.println(" Removeu No " + node.valor);
			node.valor = encontraMinimo(node.direita).valor;
			node.direita = removeMinimo(node.direita);
		} else {
			System.out.println(" Removeu No " + node.valor);
			node = (node.esquerda == null) ? node.esquerda : node.direita;
		}
		return node;
	}