The problem will be here:
Node counter = new Node(n.item);
Counter is a semi-cloned node, and I assume that .item doesn't include an edge or node list. Real problem here is you are not modifying the real node's visited status. So you essentially are trying to fetch the first child of the first child over and over again since it doesn't realize its been visited.
I don't like the idea of having visited incorporated as a part of the Node class. If you do this, it means you need to go through and reset all item's visited status either prior to or after any traversal. A better option is to track the visited status in an array or collection, and compare it when you are iterating the whiles.