luCrossTrain = function (rootResourceId, resources, qnaFileToResourceMap, intentName) {
  const idToResourceMap = new Map()
  for (const resource of resources) {
    idToResourceMap.set(resource.id, resource)
  }

  // Parse resources
  let rootResource = resources.filter(r => r.id.toLowerCase() === rootResourceId.toLowerCase())[0]
  rootResource.visited = true
  mergeRootInterruptionToLeaves(rootResource, idToResourceMap, qnaFileToResourceMap, intentName)
  
  return Array.from(idToResourceMap.values())
}
Lu cross training core function. Do lu cross training from a root to its children once.
@param {string} rootResourceId the root resource object id
@param {any[]} resources all lu resource object list
@param {any[]} qnaFileToResourceMap map of qna file id and resource
@param {string} intentName interruption intent name
@returns {any[]} updated resource objects