Задачу решил , но скорее интуитивно и методом перебора и немного подсмотрел в гугле :) не совсем понятно как это работает ( может я что забыл или пропустил) public boolean add (String s) { Entry<String> entry = new Entry<>(s); Entry<String> p; for (int i = 0; i < treeList.size(); i++) { p = treeList.get(i); if (entry.isAvailableToAddChildren()){ if (p.availableToAddLeftChildren) { p.availableToAddLeftChildren = false; p.leftChild = entry; entry.parent = p; treeList.add(entry); size++; return true; } ........ вот этих p.leftChild = entry; entry.parent = p; p - это переменная ссылочного типа класса Entry leftChild - это переменная ссылочного типа класса Entry entry - это переменная ссылочного типа класса Entry буду очень благодарен если объясните по подробнее как это работает. Спасибо