// your code goes here
const list = new Map([ ['root', {nodeId: 'root', children: ['n1', 'n2']}], ['n2', {nodeId: 'n2', children: ['n3']}], ['n3', {nodeId: 'n3', children: ['n1', 'n4']}], ['n4', {nodeId: 'n4', children: []}] ]);
// console.log(JSON.stringify(list.get('root')));
const getRootSet = (rootNodeId, list) => {
let results = [];
let nodes = [rootNodeId];
let index = 0;
while(index < nodes.length) {
const node = list.get(nodes[index]);
// console.log('node'+index+': '+JSON.stringify(node));
if(node) {
results.push(node.nodeId);
if (node.children.length > 0) {
node.children.forEach(childId => {
if(!nodes.includes(childId)) {
nodes.push(childId);
}
});
// console.log('nodes: '+JSON.stringify(nodes));
}
}
index++;
}
return results;
};
// console.log(getRootSet('root', list));
console.log(JSON.stringify(getRootSet('root', list)));
Ly8geW91ciBjb2RlIGdvZXMgaGVyZQoKY29uc3QgbGlzdCA9IG5ldyBNYXAoWyBbJ3Jvb3QnLCB7bm9kZUlkOiAncm9vdCcsIGNoaWxkcmVuOiBbJ24xJywgJ24yJ119XSwgWyduMicsIHtub2RlSWQ6ICduMicsIGNoaWxkcmVuOiBbJ24zJ119XSwgWyduMycsIHtub2RlSWQ6ICduMycsIGNoaWxkcmVuOiBbJ24xJywgJ240J119XSwgWyduNCcsIHtub2RlSWQ6ICduNCcsIGNoaWxkcmVuOiBbXX1dIF0pOwoKLy8gY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkobGlzdC5nZXQoJ3Jvb3QnKSkpOwoKICAgIGNvbnN0IGdldFJvb3RTZXQgPSAocm9vdE5vZGVJZCwgbGlzdCkgPT4geyAgICAKICAgICBsZXQgcmVzdWx0cyA9IFtdOwogICAgIGxldCBub2RlcyA9IFtyb290Tm9kZUlkXTsKICAgICBsZXQgaW5kZXggPSAwOwogICAgIHdoaWxlKGluZGV4IDwgbm9kZXMubGVuZ3RoKSB7CiAgICAgICBjb25zdCBub2RlID0gbGlzdC5nZXQobm9kZXNbaW5kZXhdKTsKLy8gY29uc29sZS5sb2coJ25vZGUnK2luZGV4Kyc6ICcrSlNPTi5zdHJpbmdpZnkobm9kZSkpOwogICAgICAgaWYobm9kZSkgewogICAgICAgICByZXN1bHRzLnB1c2gobm9kZS5ub2RlSWQpOwogICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkSWQgPT4gewogICAgICAgICAgICAgIGlmKCFub2Rlcy5pbmNsdWRlcyhjaGlsZElkKSkgewogICAgICAgICAgICAgICAgbm9kZXMucHVzaChjaGlsZElkKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgfSk7Ci8vIGNvbnNvbGUubG9nKCdub2RlczogJytKU09OLnN0cmluZ2lmeShub2RlcykpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgICBpbmRleCsrOwogICAgIH0KICAgIAogICAgcmV0dXJuIHJlc3VsdHM7Cn07CgovLyBjb25zb2xlLmxvZyhnZXRSb290U2V0KCdyb290JywgbGlzdCkpOwpjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShnZXRSb290U2V0KCdyb290JywgbGlzdCkpKTs=