Как исправить двоичные деревья, возвращающиеся с «не может прочитать« слева »от нуля» после выполнения теста? - PullRequest
1 голос
/ 15 июня 2019

Мои модульные тесты для моего двоичного дерева и дерева двоичного поиска возвращаются как

TypeError: Невозможно прочитать свойство 'left' из null.

Здесь мы рассмотрели похожие вопросы и проверили наличие ошибок в заглавных буквах, ошибок отступов, запустили npm run lint, чтобы проверить наличие ошибок linter.Мой модульный тест возвращается как TypeError (которые обычно очевидны для исправления), и я в недоумении, почему он считает, что свойство 'left' of null не читается.Я не вижу каких-либо проблем с определением объема работ, и я в растерянности.Куда бы вы посоветовали обратить мое внимание на следующее?

class Node {
  constructor(value) {
    this.value = value;
    this.left = null;
    this.right = null;
  }
}

class BinaryTree {
  constructor() {
    this.root = null;
  }

  preOrder() {
    let results = [];

    let _walk = node => {

      results.push(node);

      if(node.left) _walk(node.left);

      if(node.right) _walk(node.right);

    };

    _walk(this.root);

    return results;
  }
};

Я ожидаю, что это вернет коллекцию из обхода предзаказа, но выдает

TypeError: Cannot read property 'слева от нуля

на if(node.left) в функции _walk.

1 Ответ

0 голосов
/ 16 июня 2019

Это происходит, когда this.root равно null (т. Е. Когда дерево пусто).Решение состоит в том, чтобы поставить тест null в самом начале вашей рекурсивной функции:

let _walk = node => {
  if (!node) return; // <--- here
  results.push(node.value);
  _walk(node.left); // <--- not here
  _walk(node.right);
};
...