Уже запуталась немного как восстанавливать возможность иметь детей. Сделала так: если больше не осталось вершин,способных иметь детей,то в дереве нахожу все бездетные вершины и добавляю их в главную очередь (leaves).
public boolean add(String s) {

     Entry<String>  entry = new Entry<>(s);

     if (currentNode==null){   //восстановление потомков, если currentNode == null, значит очередь leaves пуста, надо ее восстановить и
         recoverLeaves(root);
         currentNode = leaves.poll();
     }
     if (!currentNode.isAvailableToAddChildren()) {
          currentNode = leaves.poll();
      }
      addChild(entry,currentNode);

      size++;
      return true;

  }
private void recoverLeaves(Entry<String> rootNode){
       Queue<Entry<String>> queue = new LinkedList<>();
       Entry<String> elem = rootNode;
       do{
           if (queue.size()!=0) elem = queue.poll();
           if (elem.isChildFree()) {
               elem.availableToAddLeftChildren = true;
               elem.availableToAddRightChildren = true;
               leaves.add(elem);
           } else {
               if (elem.leftChild!=null) queue.add(elem.leftChild);
               if (elem.rightChild!=null) queue.add(elem.rightChild);
           };

       }while (queue.size()!=0);
    }
Пример работает вроде норм.Но видно, что -то я упустила.