【发布时间】: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);
如果我尝试传递未定义的值
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