【问题标题】:binary tree add an undefined node二叉树添加一个未定义的节点
【发布时间】:2019-02-19 14:27:34
【问题描述】:

问题

我正在尝试更好地学习树理论,我可以毫无问题地添加一个或多个节点,但我注意到如果我尝试在不传递参数的情况下启动多个添加函数,它根本不起作用。你能解释一下我的错误在哪里吗?

代码

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

如果我尝试传递未定义的值

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

期待

我希望最后一个 console.log 不会丢失 2 的值。

。我阅读这篇文章是为了更好地理解如果我没有将任何值传递给函数

What happens if I don't pass a parameter in a Javascript function? 和其他帖子(如介质和堆栈溢出)和与树理论相关的指南,但我没有找到任何解决方案

解决方案

感谢@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;
};

【问题讨论】:

  • 如果不带参数调用add()会发生什么?

标签: javascript data-structures tree


【解决方案1】:

什么都没有发生,因为这两个条件都将undefined 作为value 评估为假。

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);

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多