ok grazie a questo punto posto il codice nell'ordine in cui lo legge il debug...
allora sono un pollo, ho trovato il bandolo della matassa, mentre riscrivevo qui il codice mi sono accorto cosa mancava!! Comunque a scopo informativo lo riporto comunque!

main:
codice:
import java.util.*;
public class TestAlberiLF {

	
	public static void main(String[] args){


		AlberoLF<Integer> tree=new AlberoLF<Integer>();
		
		NodoLF<Integer> root=tree.addRoot(9);
classe AlberoLF<T>
codice:
public class AlberoLF<T> {
	       private NodoLF<T> root;
               [.....]
                //Metodo addRoot, aggiunge il valore data di tipo T ad un nuovo oggetto ti tipo Nodo
        	public NodoLF<T> addRoot(T data){
		NodoLF<T> tmp=new NodoLF<T>(data);
		addNode(null,tmp);
		return tmp;
	}

                //Metodo addNode, aggiunge alla coda di un nodo preesistente (o null in questo caso
        public NodoLF<T> addNode(NodoLF<T> nodoOld, NodoLF<T> nodoNew){
               if (nodoOld==null)//mancava questo
                        nodoOld=new NodoLF<T>();//e questo
		nodoNew.setGenitore(nodoOld);
		if(nodoOld.getPrimoFiglio()==null){
			nodoOld.setPrimoFiglio(nodoNew);
			return nodoNew;
		}
		else
			nodoOld=nodoOld.getPrimoFiglio();
		
		while (nodoOld.getProssimoParente()!=null){
			nodoOld=nodoOld.getProssimoParente();
		}
		nodoOld.setProssimoParente(nodoNew);
		return nodoNew;
	}
        //setGenitore, passando al metodo un nodo il metodo lo collega ad un nodo precedente
	public void setGenitore(NodoLF<T> nodo){
		this.genitore=nodo;
	}