public void insertPath(Tree<FileNode> t, QueueList<String> filePathQueue) throws InvalidOperationException{

	// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	// Implement this method. Hint: You will need to use
	// recursion, at each step dequeuing the next path and then
	// searching to see if the directory already exists.
	// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    	
    	String dequeuedString = filePathQueue.dequeue();
    	
    	if(dequeuedString == null){
    		throw new InvalidOperationException("dequeued null value");
    	}
    	else{
    		//Find if the directory label exists in the immediate children of tree and store the result in {@link node}
    		Tree<FileNode> node = t.findChild(new FileNode (dequeuedString, true));
    	
    		if (node != null){
    			//if the directory exists call recursively to continue down the path while queue is not empty
    			if(!filePathQueue.isEmpty()){
    				insertPath(node,filePathQueue);
    			}
    		}
    		else if(filePathQueue.isEmpty()){
    			//if label does not exist and the queue is empty, insert {@link dequeuedString} as a file
    			t.addChild(new Tree<FileNode> ( new FileNode(dequeuedString, false)));
    		}
    		else if (!filePathQueue.isEmpty()){
    			//if label does not exist and the queue is not empty, create {@link dequeuedString} as a directory
    			node = (new Tree<FileNode> (new FileNode(dequeuedString, true)));
    			t.addChild(node);
    			//call the method recursively on the new child directory to continue the path
    			insertPath(node,filePathQueue);
    		}
    	}
    		
    }