private void traverse(TreeNode current, TraverseCallback callback) {
			TreeNode previous;
			do {
				while (!current.leftIsWire) {
					current = current.leftChild;
				}
				
				callback.action(current);
				
				previous = current;
				current = current.rightChild;
				while (previous.rightIsWire && current != null) {
					callback.action(current);
					
					previous = current;
					current = current.rightChild;
				}
			} while (current != null);
		}