JavaScript -TypeError:无法读取未定义的属性“子级”

时间:2018-08-23 11:39:18

标签: javascript node.js data-structures tree

我正在尝试创建一棵树并计算其高度。 map数组已在for循环中正确初始化,但console.log(map+" this is map");显示  [object Object],[object Object],[object Object],[object Object],[object Object] this is map。我在

的第二个for循环中访问children属性时遇到问题
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;
    }



}

1 个答案:

答案 0 :(得分:0)

将'map'声明为对象数组。然后像这样使用。

map.push({node})

我遇到了同样的问题,我确实这样做。列表声明为对象数组。