问题
我正在尝试更好地研究树理论,我可以添加一个或多个节点而不会出现问题,但是我注意到,如果我尝试在不传递参数的情况下启动多个add函数,则根本不起作用。你能解释我的错误在哪里吗?
代码
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;
};
答案 0 :(得分:2)
什么也没有发生,因为两个条件都将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);