Problema no método que retorna um Nó pai de uma árvore

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.