[英]binary tree add an undefined node
问题
我正在尝试更好地研究树理论,我可以毫无问题地添加一个或多个节点,但我注意到如果我尝试在不传递参数的情况下启动多个添加函数,它根本不起作用。 你能解释一下我的错误在哪里吗?
代码
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 的值。
. 我读了这篇文章是为了更好地理解如果我没有向函数传递任何值会怎样
如果我不在 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;
};
什么也没有发生,因为两个条件都将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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.