Qual o erro nesse método que retorna um Nó pai

A árvore é a seguinte.

         (A)
        /    \
     (B)    (C)
     / \      /
  (D) (E) (G)
  /
(F)

A esquerda de A, o retorno do Nó pai ta funcionando beleza. Quando coloco C pra retornar o pai, retorna A beleza, já quando coloco G ele dar um erro. O código é o seguinte.

public void busca_pai(char dado){
    	System.out.println(this.busca_pai(dado, this.getRaiz()).getDado());
    }

    private Node busca_pai(char dado, Node no){ 
     	Node pai = no;
     	if (no != null) {
     		if ((no.getEloEsquerdo() != null) || (no.getEloDireito() != null)) {
     			if ((no.getEloEsquerdo().getDado() == dado) ||
     					(no.getEloDireito().getDado() == dado)) {
     				pai = no;
     			} else {
         			if (no.getEloEsquerdo().getDado() != dado) {
         				pai = busca_pai(dado, no.getEloEsquerdo());	
         			} else {
         				if (no.getEloDireito().getDado() != dado) {
         					pai = busca_pai(dado, no.getEloDireito());	
         				}
             		}
     			}
     		}
     	}
     	return pai;
     }

Se alguém puder me ajudar ficaria grato.
Hélio jr.

Tah, vamos começar com vc dizendo qual é o erro…?!?

eu suponho que seja um nullpointerexception, porque:

         if ((no.getEloEsquerdo() != null) || (no.getEloDireito() != null)) { 

Se tiver nó na esquerda OU na direita ele vai entrar no if ok?!

e ai vc faz isso:

              if ((no.getEloEsquerdo().getDado() == dado) ||
                    (no.getEloDireito().getDado() == dado)) { 

quebra as pernas, ele pode entrar ai se tiver nó na esquerda ou direita, pode ser que na direita e na esquerda seja null, e ai vc executa o método getDado para os dois?! vai dar nullpointer… se vc faz algo do tipo:

if((a != null) || (b != null)) {
}

não pode colocar dentro do if ja direito algo como, tem que checar:

a.executa();
b.executa();

E tb acho que há um erro de lógica:

				} else {
					if (no.getEloEsquerdo().getDado() != dado) {
						pai = busca_pai(dado, no.getEloEsquerdo());
					} else {
						if (no.getEloDireito().getDado() != dado) {
							pai = busca_pai(dado, no.getEloDireito());
						}
					}

Tipo, se esquerda for diferente e direita for diferente, vc naum pode testar soh um ou outro, tem que testar os dois, isso eh uma busca em arvore… no seu caso sempre vai entrar no primeiro if ja que para entrar nesse else obrigatóriamente direita e esquerda são diferentes…

e o que vc quer fazer?! buscar o pai de um nó ou buscar um nó com determinado dado em uma arvore?!

Tah, se quizer que eu te explique melhor, posta depois sua classe Node.