我正在练习解决算法问题,需要帮助才能找到我的代码中的错误。
---方向 给定一棵树的根节点,返回 一个数组,其中每个元素都是宽度 每个级别的树的数量。
我尝试过在其上运行测试用例,以及在JSBin中运行它,但是没有运气。运行测试时出现此错误:TypeError:undefined不可迭代
// my node class
class Node {
constructor(data) {
this.data = data;
this.children = [];
}
add(data) {
this.children.push(new Node(data));
}
};
function levelWidth(root) {
const store = [];
const widths = [0];
if(root){
store.push(root);
store.push('stop');
}
while(store.length > 1){
const value = store.shift();
if(value === 'stop'){
widths.push(0);
store.push(stop);
}
else {
store.push(...value.children);
widths[widths.length - 1]++;
}
}
return widths;
}
运行时
expect(levelWidth(root)).toEqual([1, 3, 2]);
我期望得到[1,3,2]的数组,但会得到TypeError:undefined对于
是不可迭代的 store.push(...value.children);
从我可以看到我正确使用了散布运算符吗?
答案 0 :(得分:1)
由于未定义变量stop
,导致了您当前的错误;也就是说,您的表达式store.push(stop);
引用了一个未定义的变量stop
。
注释该行和 specific 错误不再是问题:
// my node class
class Node {
constructor(data) {
this.data = data;
this.children = [];
}
add (data) {
this.children.push(new Node(data));
}
};
function levelWidth (root) {
const store = [];
const widths = [0];
if (root) {
store.push(root);
store.push('stop');
}
while (store.length > 1) {
const value = store.shift();
if (value === 'stop') {
widths.push(0);
// store.push(stop);
}
else {
store.push(...value.children);
widths[widths.length - 1]++;
}
}
return widths;
}