двоичное дерево добавить неопределенный узел - PullRequest
0 голосов
/ 19 февраля 2019

Проблема

Я пытаюсь лучше изучить теорию дерева, я могу добавить один или несколько узлов без проблем, но я заметил, что если я попыталсязапустить функцию множественного добавления без передачи параметра, просто это не работает.Не могли бы вы объяснить, где моя ошибка?

Код

BinarySearchTree.prototype.makeNode = function(value) {
    var node = {};
    node.value = value;
    node.left = null;
    node.right = null;
    return node;
};

BinarySearchTree.prototype.add = function(value) {
    var currentNode = this.makeNode(value);
    if (!this.root) {
        this.root = currentNode;
    } else {
        this.insert(currentNode);
    }

    return this;
};

BinarySearchTree.prototype.insert = function(currentNode) {
    var value = currentNode.value;
    var traverse = function(node) {
        if (value > node.value) {
            if (!node.right) {
                node.right = currentNode;
                return;
            } else traverse(node.right);
        } else if (value < node.value) {
            if (!node.left) {
                node.left = currentNode;
                return;
            } else traverse(node.left);
        }
    };
    traverse(this.root);
};

Теперь, если я попытаюсь

var bst = new BinarySearchTree();
bst.add(3).add(2);
console.log(bst);

, у меня будет это console.log enter image description here

, если я пытаюсь передать неопределенное значение

var bst = new BinarySearchTree();
    bst.add().add(2);
    console.log(bst);

console.log

Ожидание

Я ожидаю, что последний файл console.log не потерял значение 2.

.я прочитал этот пост, чтобы лучше понять, что если я не передал значение функции

Что произойдет, если я не передам параметр в функцию Javascript? и другие сообщения (как переполнение среды и стека) и руководство, связанное с теорией дерева, но я не нашел никакого решения

РЕШЕНИЕ

Благодаря рекомендациии исправление @Nina Scholz я просто добавил эту строку в эту функцию

BinarySearchTree.prototype.add = function(value) {
    if (typeof value == 'undefined') {
        value = null;
    }
    var currentNode = this.makeNode(value);
    if (!this.root) {
        this.root = currentNode;
        console.log('sei qui')
    } else {
        this.insert(currentNode);
    }

    return this;
};

1 Ответ

0 голосов
/ 19 февраля 2019

Ничего не происходит, потому что оба условия оцениваются с undefined как value в false.

if (value > node.value) {
    // ...
} else if (value < node.value) {
    // ...
}

function BinarySearchTree() {}

BinarySearchTree.prototype.makeNode = function(value) {
    var node = {};
    node.value = value;
    node.left = null;
    node.right = null;
    return node;
};

BinarySearchTree.prototype.add = function(value) {
    var currentNode = this.makeNode(value);
    if (!this.root) {
        this.root = currentNode;
    } else {
        this.insert(currentNode);
    }

    return this;
};

BinarySearchTree.prototype.insert = function(currentNode) {
    var value = currentNode.value;
    var traverse = function(node) {
        if (value > node.value) {
            if (!node.right) {
                node.right = currentNode;
                return;
            } else traverse(node.right);
        } else if (value < node.value) {
            if (!node.left) {
                node.left = currentNode;
                return;
            } else traverse(node.left);
        }
    };
    traverse(this.root);
};

var bst = new BinarySearchTree();
bst.add(3).add(2).add();
console.log(bst);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...