Я работаю над бинарным деревом поиска, и мне трудно вызывать класс Node из моего BST-класса. Кажется, это должно быть легкое решение, но мне трудно его найти. В любом случае, проблема в самом начале моей функции insert () с этой строкой - newNode = new Node (val); выдаёт мне эту ошибку - Uncaught ReferenceError: newNode не определен в BST.insert
Единственное решение, которое мне удалось найти, - это использовать функцию stati c в классе Node, но я не тестировал это все же, поскольку кажется, что это плохой обходной путь, потому что я не хочу, чтобы узлы имели какую-либо функцию помимо заполнения моего двоичного дерева, и я бы сразу же преобразовал его обратно в коннотацию ES5, где он работал просто отлично. В любом случае, вот мой код -
class Node {
constructor(val) {
this.value = val;
this.left = null;
this.right = null;
}
}
class BST {
constructor() {
this.root = null;
}
insert(val) {
newNode = new Node(val);
if (this.root == null) {
this.root = newNode;
return this;
}
runner = this.root
done = false;
while (!done) {
if (val == runner.value)
done = true;
if (val < runner.value) {
if (runner.left == null) {
runner.left = newNode;
done = true;
} else
runner = runner.left
} else {
if (runner.right == null) {
runner.right = newNode;
done = true;
} else
runner = runner.right
}
}
return this;
}
preTraverse(runner) {
if (!runner)
runner = this.root;
console.log(runner.value + " ")
if (runner.left == null && runner.right == null)
return this;
else if (runner.left == null)
return preTraverse(runner.right);
else if (runner.right == null)
return preTraverse(runner.left);
else
return (preTraverse(runner.left) + preTraverse(runner.right))
}
}
var first = new BST();
first.root = new Node(30);
first.insert(20).insert(40).insert(50).insert(25).insert(10).insert(45)
console.log(first)