У меня возникли проблемы с выяснением того, как реализовать метод contains
ниже. Я пытаюсь использовать поиск глубины, чтобы найти, содержит ли дерево значение, но я не уверен, что случилось с моей реализацией.Максимальный размер стека вызовов. Невозможно определить, где логика неверна
class Tree {
constructor(val) {
this.value = val;
this.children = [];
}
addChild(val) {
this.children.push(new Tree(val));
}
contains(val) {
if (this.value === val) {
return true;
} else if (this.children.length > 0) {
for (var i = 0; i < this.children.length; i++) {
this.contains(this.children[i].contains(value));
}
// When it gets to the leaf node, how do I go back to the previous call?
// Do I need to return something here?
}
return false; // I may be incorrect on this, but it should return false (execute this line) only when every node has been visited, and there are no more nodes to check.
}
};
Так что, когда я делаю это:
const T = new Tree(100);
T.addChild(50);
T.addChild(40);
T.children[0].addChild(3);
console.log(T.contains(40));
я ошибка из-за максимальной ошибки стека вызовов.
Я предполагаю, что вызов 'contains()' дважды внутри цикла, который фактически находится внутри 'contains()', становится слишком большим для плохого браузера – adeneo