#javascript
Вопрос:
Я пытаюсь получить результаты Depthfirsttraverself для бинарного дерева поиска. Но я получаю результат Бланко.
Итак, у меня есть это:
class BST {
constructor(value) {
this.left = null;
this.right = null;
this.value = value;
}
insert(value) {
if (value <= this.value) {
if (!this.left) this.left = new BST(value);
else this.left.insert(value);
} else if (value > this.value) {
if (!this.right) this.right = new BST(value);
else {
this.right.insert(value);
}
}
}
depthFirstTraversel = (iteratorFunc) => {
if (this.left) this.left.depthFirstTraversel(iteratorFunc);
if (this.right) this.right.depthFirstTraversel(iteratorFunc);
};
}
function log(value) {
console.log(value);
}
const bst = new BST(50);
bst.insert(30);
bst.insert(70);
bst.insert(100);
bst.insert(60);
bst.insert(59);
bst.insert(20);
bst.insert(45);
bst.insert(35);
bst.insert(85);
bst.insert(105);
bst.insert(10);
bst.depthFirstTraversel(log);
Итак, я ожидаю, что числа будут в порядке возрастания: 10 20 30..и т. Д
Но я получаю страницу Бланко в инструментах для разработки Google chrome
Комментарии:
1. Вы никогда на самом деле не вызываете свой
iteratorFunc
( т. Е. вход в вашем случае), а просто переходите к следующему узлу …
Ответ №1:
Ваш depthFirstTraversel не пытается ничего выводить, все, что он делает, — это пересекает. По какой-то причине вы продолжаете передавать log
функцию в качестве параметра, но никогда не вызываете ее.
Вот исправленная версия (я удалил передачу функции журнала в качестве параметра, потому что ее можно просто вызвать напрямую.)
class BST {
constructor(value) {
this.left = null;
this.right = null;
this.value = value;
}
insert(value) {
if (value <= this.value) {
if (!this.left) this.left = new BST(value);
else this.left.insert(value);
} else if (value > this.value) {
if (!this.right) this.right = new BST(value);
else {
this.right.insert(value);
}
}
}
depthFirstTraversel = () => {
if (this.left) this.left.depthFirstTraversel();
log(this.value);
if (this.right) this.right.depthFirstTraversel();
};
}
function log(value) {
console.log(value);
}
const bst = new BST(50);
bst.insert(30);
bst.insert(70);
bst.insert(100);
bst.insert(60);
bst.insert(59);
bst.insert(20);
bst.insert(45);
bst.insert(35);
bst.insert(85);
bst.insert(105);
bst.insert(10);
bst.depthFirstTraversel(log);
Комментарии:
1. эх, спасибо тебе. Но результат оказался не таким, как я ожидал. То, что я сказал, должно быть: в порядке возрастания, так что: 10, 20, 30 и т. Д
2. Вы спросили, почему он не производит никакой продукции, вот что я ответил.
3. Но также и результат. это тоже то, о чем я спрашивал.
4. Чтобы иметь его в порядке возрастания, вам на самом деле нужно будет вывести значение после обхода левого, но перед переходом к правому дочернему элементу
5. Спасибо @derpischer, я внес это изменение