在es6中找到我的树级别宽度算法中的错误

时间:2019-03-24 15:57:33

标签: javascript algorithm ecmascript-6 tree

我正在练习解决算法问题,需要帮助才能找到我的代码中的错误。

---方向 给定一棵树的根节点,返回 一个数组,其中每个元素都是宽度 每个级别的树的数量。

我尝试过在其上运行测试用例,以及在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);

从我可以看到我正确使用了散布运算符吗?

1 个答案:

答案 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;
}