Javascript TypeError:无法读取属性';左';未定义的 我试图解决黑客等级的图形数据结构问题 我的方法应该返回为所有人提供库的最低成本 这里提供我的黑客等级问题 我计划使用BFS解决这个问题 所以我读了一些文章,找到了这个链接 但问题是我得到了这个错误类型错误:无法读取未定义的属性'left' 我使用了中间代码 下面提供我的代码片段 你能告诉我怎么修吗 “严格使用”; 常数fs=要求('fs'); process.stdin.resume(); 进程标准设置编码('utf-8'); 让inputString=''; 设currentLine=0; process.stdin.on('data',inputStdin=>{ inputString+=inputStdin; }); process.stdin.on('end',function()){ inputString=inputString.replace(/\s*$/,“”) .split(“\n”) .map(str=>str.replace(/\s*$/,“”)); main(); }); 函数readLine(){ 返回inputString[currentLine++]; } //完成下面的roadsAndLibraries功能。 功能道路和图书馆(北、库、库路、城市){ console.log(“路沙库n-->”,n); log(“roadsAndLibraries c_lib-->”,c_lib); console.log(“道路和图书馆c_路-->”,c_路); console.log(“路沙图书馆城市-->”,城市); var m=新映射(); m、 集合('a',2); m、 集合('b',3); m、 集合('b',3); m、 集合('b',2); m、 集合('b',1); log(“映射值-->”,m); //检查根节点是否存在。 //if(rootNode==null){ //返回; // } //检查根节点是否存在。 如果(n==null){ log(“n根节点-->”,n); 返回; } //创建队列并将根节点推入其中。 //变量队列=[]; //push(rootNode); //创建队列并将根节点推入其中。 变量队列=[]; 排队推送(n); console.log(“queue.push-->”,queue); while(queue.length>0){ //在队列顶部创建对currentNode的引用。 var currentNode=队列[0]; //如果currentNode具有左子节点,请将其添加到队列中。 if(currentNode.left!==null){ queue.push(currentNode.left) } //如果currentNode具有正确的子节点,请将其添加到队列中。 if(currentNode.right!==null){ queue.push(currentNode.right) } //从队列中删除currentNode。 queue.shift() } } 函数main(){ const ws=fs.createWriteStream(process.env.OUTPUT\u路径); log(“ws-->”,ws); const q=parseInt(readLine(),10); log(“q-->”,q); for(设qItr=0;qItr”,nmC_libC_路); const n=parseInt(nmC_libC_路[0],10); console.log(“n-->”,n); const m=parseInt(nmC_libC_路[1],10号); console.log(“m-->”,m); const c_lib=parseInt(nmC_libC_路[2],10号); log(“c_lib-->”,c_lib); const c_road=parseInt(nmC_libC_road[3],10); 控制台日志(“丘路-->”,丘路); 设城市=数组(m); console.log(“cities-->”,cities); for(设i=0;iparseInt(citiesTemp,10)); } const result=道路和图书馆(n、c_lib、c_road、城市); console.log(“result-->”,result); write(结果+'\n'); } ws.end(); }

Javascript TypeError:无法读取属性';左';未定义的 我试图解决黑客等级的图形数据结构问题 我的方法应该返回为所有人提供库的最低成本 这里提供我的黑客等级问题 我计划使用BFS解决这个问题 所以我读了一些文章,找到了这个链接 但问题是我得到了这个错误类型错误:无法读取未定义的属性'left' 我使用了中间代码 下面提供我的代码片段 你能告诉我怎么修吗 “严格使用”; 常数fs=要求('fs'); process.stdin.resume(); 进程标准设置编码('utf-8'); 让inputString=''; 设currentLine=0; process.stdin.on('data',inputStdin=>{ inputString+=inputStdin; }); process.stdin.on('end',function()){ inputString=inputString.replace(/\s*$/,“”) .split(“\n”) .map(str=>str.replace(/\s*$/,“”)); main(); }); 函数readLine(){ 返回inputString[currentLine++]; } //完成下面的roadsAndLibraries功能。 功能道路和图书馆(北、库、库路、城市){ console.log(“路沙库n-->”,n); log(“roadsAndLibraries c_lib-->”,c_lib); console.log(“道路和图书馆c_路-->”,c_路); console.log(“路沙图书馆城市-->”,城市); var m=新映射(); m、 集合('a',2); m、 集合('b',3); m、 集合('b',3); m、 集合('b',2); m、 集合('b',1); log(“映射值-->”,m); //检查根节点是否存在。 //if(rootNode==null){ //返回; // } //检查根节点是否存在。 如果(n==null){ log(“n根节点-->”,n); 返回; } //创建队列并将根节点推入其中。 //变量队列=[]; //push(rootNode); //创建队列并将根节点推入其中。 变量队列=[]; 排队推送(n); console.log(“queue.push-->”,queue); while(queue.length>0){ //在队列顶部创建对currentNode的引用。 var currentNode=队列[0]; //如果currentNode具有左子节点,请将其添加到队列中。 if(currentNode.left!==null){ queue.push(currentNode.left) } //如果currentNode具有正确的子节点,请将其添加到队列中。 if(currentNode.right!==null){ queue.push(currentNode.right) } //从队列中删除currentNode。 queue.shift() } } 函数main(){ const ws=fs.createWriteStream(process.env.OUTPUT\u路径); log(“ws-->”,ws); const q=parseInt(readLine(),10); log(“q-->”,q); for(设qItr=0;qItr”,nmC_libC_路); const n=parseInt(nmC_libC_路[0],10); console.log(“n-->”,n); const m=parseInt(nmC_libC_路[1],10号); console.log(“m-->”,m); const c_lib=parseInt(nmC_libC_路[2],10号); log(“c_lib-->”,c_lib); const c_road=parseInt(nmC_libC_road[3],10); 控制台日志(“丘路-->”,丘路); 设城市=数组(m); console.log(“cities-->”,cities); for(设i=0;iparseInt(citiesTemp,10)); } const result=道路和图书馆(n、c_lib、c_road、城市); console.log(“result-->”,result); write(结果+'\n'); } ws.end(); },javascript,node.js,express,data-structures,queue,Javascript,Node.js,Express,Data Structures,Queue,编译后 Input(标准输入法)下载 2. 3 3 2 1 1 2 3 1 2 3 6 6 2 5 1 3 3 4 2 4 1 2 2 3 5 6 您的输出(标准输出) ~z~在stdout上没有响应~ 预期输出下载 4. 12 调试输出 ws-->WriteStream{ _可写状态: 可写状态{ objectMode:false, 高水印:16384, 最终结论:错误, 李安:错, 结尾:错, 结束:错, 完成:假, 销毁:错误, 是的, defaultEncoding:'utf8', 长度

编译后

Input(标准输入法)下载
2.
3 3 2 1
1 2
3 1
2 3
6 6 2 5
1 3
3 4
2 4
1 2
2 3
5 6
您的输出(标准输出)
~z~在stdout上没有响应~
预期输出下载
4.
12
调试输出
ws-->WriteStream{
_可写状态:
可写状态{
objectMode:false,
高水印:16384,
最终结论:错误,
李安:错,
结尾:错,
结束:错,
完成:假,
销毁:错误,
是的,
defaultEncoding:'utf8',
长度:0,
写作:错,
软木塞:0,
是的,
缓冲处理:false,
onwrite:[函数:绑定onwrite],
writeb:null,
writelen:0,
bufferedRequest:null,
lastBufferedRequest:null,
待定CB:0,
预完成:false,
错误:错误,
关闭:错误,
bufferedRequestCount:0,
软木要求自由:
{next:null,
条目:null,
finish:[函数:绑定onmarkedfinish]},
可写:对,
_事件:[对象:空原型]{},
_事件提示:0,
_maxListeners:未定义,
路径:
“/tmp/submission/20190702/20/31/hackerrank-d27db21d31abaf7353d49d7e433da3a/0.userout”,
fd:null,
旗帜:“w”,
模式:438,
开始:未定义,
自动关闭:是的,
位置:未定义,
字节:0,
关闭:false}
q--->2
nmC_libC_路-->['3','3','2','1']
n--->3
m--->3
库-->2
丘道-->1号
城市-->[]
路沙图书馆n--->3
道路和图书馆c_lib->2
路与库道-->1号
道路和图书馆城市-->[[1,2],[3,1],[2,3]]
映射值-->map{'a'=>2,'b'=>1}
队列.推送-->[3]

只是猜测,但请记住,在JavaScript中,未定义和null不是一回事。如此未定义!==空是真实的。在循环中,您应该添加currentNode.right和currentNode.left未定义的检查

您当前的问题是
queue.push(currentNode.left)
(和
queue.push(currentNode.right)
)正在以
null
未定义的方式执行。在第二次循环中,队列中将有两个未定义的元素,
currentNode
现在将是未定义的,因此您当然不能访问未定义的
left
right
属性

为什么会这样?基本上你没有
const n = parseInt(nmC_libC_road[0], 10);
console.log("n--->", n);