Arvore com rich faces

criei um arvore para componentes rich faces, fiz um metodo recursivo para preencher arvore.

raiz
pai
filho
neto
bisneto
tataraneto

ate ai tudo bem. Meu problema e quando tenho de adionar um novo filho
esta adicionando no no errado, colocaldo dentro de tataraneto.

codigo abaixo:


private void carregarArvore(String s , TreeNodeImpl<String> node)throws NegocioException {
    	
		int ct = 0;   
	    while (iteratorContas.hasNext()) {   
	    	ct++;
	        PlanoConta pc = (PlanoConta) iteratorContas.next();   
	
	        
			if (pc.getNivel().equals("5")) {
				pai = false;
				filho = true;
			} else if (Integer.parseInt(pc.getNivel()) <= 4) {
				pai = true;
				filho = false;
			}	        
	        
			if(ct == 3){
				System.out.println("estou aqui");
			}
			
	        if(pai && filho == false){
	           	TreeNodeImpl<String> nodeImpl = new TreeNodeImpl<String>();   
  	           	nodeImpl.setData(pc.getContaReduzida() + " - " + pc.getNomenclatura());     	           	
  	           
  	           	if(pc.getNivel().equals("1")){
  	           		nodeBase.addChild(primeiro, nodeImpl);
  	           		primeiro++;
  	           		//System.out.println(pc.getContaReduzida() + " - " + pc.getNomenclatura());
  	           	}else{
	           		node.addChild(ct, nodeImpl);
  	          }
  	           	carregarArvore(pc.getContaReduzida() + " - " + pc.getNomenclatura(), nodeImpl);		  	         
	        }else if (pai == false && filho){
        		TreeNodeImpl<String> nodeImpl = new TreeNodeImpl<String>();   
	  	        nodeImpl.setData(pc.getContaReduzida() + " - " + pc.getNomenclatura());   
	  	        node.addChild(ct, nodeImpl);
	  	        System.out.println(ct + " - " + pc.getContaReduzida() + " - " + pc.getNomenclatura());
	        }
	    }
	}

imagem tela :

Estou com um problema parecido, se alguem puder ajudar.

Preciso de um exemplo arvore binária