private void radiusSearchHelper(E target, KDNode top, double radiusSquare, PriorityQueue<E> neighbors, DistComparator<E> distComp) throws VariedDimensionException {
		Stack<KDNode> parents = new Stack<KDNode>();
		findLeaf(target,top,parents);
		KDNode currentNode = null;
		KDNode lastNode = null;
		
		while (!parents.isEmpty()) {
			lastNode = currentNode;
			currentNode = parents.pop();
			
			// check to see if current val should be added to list of neighbors
			// if the target is the current E object, do NOT add it
			if (!target.equals(currentNode.val)) {
				if (currentNode.val.getSquareDistance(target) <= radiusSquare) {
					neighbors.add(currentNode.val);
				}
			}
			
			// find non-traversed subtree and check if it should be searched
			if (currentNode.left != null && !currentNode.left.equals(lastNode)) {
				if (Math.pow(target.getDepthDimension(currentNode.depth) - currentNode.val.getDepthDimension(currentNode.depth),2) <=
						radiusSquare) {
					radiusSearchHelper(target,currentNode.left,radiusSquare,neighbors,distComp);
				}
			} else if (currentNode.right != null && !currentNode.right.equals(lastNode)) {
				if (Math.pow(target.getDepthDimension(currentNode.depth) - currentNode.val.getDepthDimension(currentNode.depth),2) <=
						radiusSquare) {
					radiusSearchHelper(target,currentNode.right,radiusSquare,neighbors,distComp);
				}
			} 
		}
		
	}