Поиск ошибки в алгоритме ширины моего уровня дерева в es6 - PullRequest
1 голос
/ 24 марта 2019

Я практикуюсь в решении алгоритмической проблемы, и мне нужна помощь в поиске ошибки в моем коде.

--- Направления Учитывая корневой узел дерева, верните массив, где каждый элемент является шириной дерева на каждом уровне.

Я пробовал запускать тестовые случаи на нем иа запустить его в 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], но вместо этого получитьОшибка типа: undefined не повторяется для

    store.push(...value.children);

Из того, что я вижу, правильно ли я использую оператор распространения?

1 Ответ

1 голос
/ 24 марта 2019

Ваша текущая ошибка вызвана тем, что переменная stop не определена; то есть ваше выражение store.push(stop); ссылается на неопределенную переменную stop.

Закомментируйте эту строку, и эта конкретная ошибка больше не является проблемой:

// 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...