Originariamente inviato da Who am I
Secondo me sei fuori strada, la lista dei figli è un informazione che deve possedere ogni nodo, non puoi metterla nella classe AlberoLF, altrimenti se fai così come si fa a sapere , data la lista dei figli, di quale nodo è figlio un dato elemento?
Ti suggerisco di rifare la classe NodoLF utilizzando un ArrayList, ti do uno spunto per riavviarti:

codice:
public class NodoLF<T> {
	
	private T info;
        private ArrayList<NodoLF> figli; // arraylist eventualmente vuota per i nodi foglia
        private NodoLF padre; // riferimento NULL per il nodo radice
	
	<metodi setter e getter>
}
E nella classe AlberoLF metti solamente il riferimento al nodo radice, e tramite quello accedi a tutti i suoi figli (reperibili tramite la lista dei figli).
In questo modo ogni volta che devi rimuovere un nodo come figlio di un certo nodo, rimuovi quell' elemento dalla sua lista dei figli, per aggiungerne uno lo aggiungi alla lista dei figli.
Ogni nodo appena creato contiene una lista dei figli che è vuota.
Inoltre ti faccio notare un' altra cosa:



Piccolo parere personale: ti sconsiglio di partire da del codice già fatto, altrimenti non capirai mai il meccanismo che c'è dietro.Implementando te daccapo il tutto ne capirai bene il funzionamento.
Quoto e aggiungo che seguendo questo metodo (corretto) l'utente NON dovrebbe interagire con l'albero attraverso i nodi (come ha fatto nel codice poco sopra) ma attraverso le informazioni in essi contenuti, quindi i metodi dovrebbero prendere e restituire oggetti di tipo T.
Un metodo efficace che ti obbliga a fare questo è usare la classe nodo come classe incapsulata nella classe albero, quindi imporsi uno schema iniziale del genere.

codice:
class Tree<T>
{

  private static class Node<T>
  {

    // tutta la classe nodo

  }

  // tutta la classe albero

}