我已经为二进制搜索树编写了此代码。在大多数情况下,我了解插入节点时它是如何工作的。我不太了解的是while(true)部分。
在使用while循环时,我习惯于比较某种值。
对于此代码,它如何工作?
是因为正在设置电流,而while循环返回并检查是否与传递的值匹配? while循环如何与true一起工作?
class Node {
constructor(val) {
this.val = val;
this.left = null;
this.right = null;
}
}
class BinarySearchTree {
constructor() {
this.root = null;
}
}
BinarySearchTree.prototype.insert = function(value) {
const newNode = new Node(value);
if (this.root === null) {
this.root = newNode;
}
let current = this.root;
while(true) {
if (value === current.val) return;
if (value < current.val) {
if (current.left === null) {
current.left = newNode;
}
current = current.left;
} else {
if (current.right === null) {
current.right = newNode;
}
current = current.right;
}
}
}
let tree = new BinarySearchTree();
tree.insert(10)
tree.insert(5)
tree.insert(13)
tree.insert(11)
tree.insert(2)
tree.insert(16)
tree.insert(7)
console.log(tree);
答案 0 :(得分:2)
如果有节点,insert函数将迭代,直到找到放置新节点的位置-current.right或current.left。之后,它将当前节点设置为left或right。这意味着在下一次迭代中,它将检查current.value === value,如果为true,则将退出while(true)无限循环,这是通过“返回”完成的,您也可以使用“ break”。
阅读本(Does return stop a loop?),以了解“返回”的方式。作品。
编辑:为清除此问题,“返回”和“中断”具有不同的功能,但对于您而言,它们具有相同的作用。
答案 1 :(得分:1)
对于此代码,它如何工作?除了插入相同编号时返回的代码外,代码中没有任何其他内容。它是如何突破循环的?
它返回。
返回将退出当前功能。
这将覆盖函数内部的循环。