#javascript #algorithm #ecmascript-6 #tree
#javascript #алгоритм #ecmascript-6 #дерево
Вопрос:
Я практикуюсь в решении алгоритмической задачи, и мне нужна помощь в поиске ошибки в моем коде.
— Указания По заданию корневого узла дерева верните массив, где каждый элемент равен ширине дерева на каждом уровне.
Я пытался запускать тестовые примеры на нем, а также запускать его в JSBin, но безуспешно. Получение этой ошибки при запуске test: 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);
Насколько я вижу, я правильно использую оператор spread?
Комментарии:
1.
stop
не определено, например, при вводеstore.push(stop);
.2. Да! Stop должен быть ‘stop’. Это маркер, указывающий, когда достигнут конец уровня.
Ответ №1:
Ваша текущая ошибка вызвана тем, что переменная 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;
}
Комментарии:
1. Спасибо! Старое «забыл кавычки вокруг моего значения». Мои тестовые примеры сейчас проходят.