我正在尝试创建一棵树并计算其高度。
map
数组已在for
循环中正确初始化,但console.log(map+" this is map");
显示
[object Object],[object Object],[object Object],[object Object],[object Object] this is map
。我在
map[list[i]]["children"].push(node);
错误为TypeError: Cannot read property 'children' of undefined
如何解决这个问题?
输入是-
5
4 -1 4 1 1
第一行包含节点数。第二行包含整数 从−1到− 1 —节点的父级。如果其中的第-个(0≤≤− 1)为-1,则node是根, 否则,它是第-个节点的父节点的从0开始的索引。保证只有一个根。 确保输入代表一棵树。
代码-
var readline = require('readline');
var input = [];
enter image description here
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.prompt();
rl.on('line', function (cmd) {
input.push(cmd);
});
rl.on('close', function (cmd) {
input=input[1].split(" ");
console.log(list_to_tree(input));
let tree1=list_to_tree(input);
console.log("this "+height(tree1));
process.exit(0);
});
function list_to_tree(list) {
var map = [], node, roots = [], i;
for(i=0;i<list.length;i++){
map.push({[i] :list[i],
children:[]
});
console.log(map);
}
console.log(map+" this is map");
for(i=0;i<list.length;i++){
node=map[i];
if(list[i]!==-1){
console.log(map[list[i]]);
map[list[i]]["children"].push(node);
}
else {
roots.push(node);}
}
return roots;
}
function height(tree){
if(tree===null){return 0;}
let h=0;
for(let x in tree){
for (let y in tree[x]["children"]){
h=Math.max(h,height(y));
}
return h+1;
}
}
答案 0 :(得分:0)
将'map'声明为对象数组。然后像这样使用。
map.push({node})
我遇到了同样的问题,我确实这样做。列表声明为对象数组。