Как мне вызвать один класс из другого класса в Javascript? (вопрос для начинающих) - PullRequest
0 голосов
/ 22 января 2020

Я работаю над бинарным деревом поиска, и мне трудно вызывать класс 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)

1 Ответ

0 голосов
/ 23 января 2020

Ах, да, вот в чем проблема с переключением между языками, я забываю мелочи и совершаю глупые ошибки, подобные этим. Проблема решена, спасибо за помощь!

...