我正在创建一个Binary Search Tree类,并且对while循环的工作方式感到困惑。
if (value === currentNode.value) return;
如果已经输入了相同的值,则返回false,但这也是基本情况吗?
如果我将其取出,代码将中断。当我没有输入现有值时,如何中断循环?
class Node {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}
class BinarySearchTree {
constructor() {
this.root = null;
}
insert(value) {
const newNode = new Node(value);
if (this.root === null) this.root = newNode;
let currentNode = this.root;
while (currentNode !== null) {
if (value === currentNode.value) return;
if (value < currentNode.value) {
if (currentNode.left === null) currentNode.left = newNode;
currentNode = currentNode.left;
} else {
if (currentNode.right === null) currentNode.right = newNode;
currentNode = currentNode.right;
}
}
}
}
答案 0 :(得分:0)
您的循环中断,因为如果条件仅检查小于或大于和等于的值。您需要在其他条件中插入if (value === currentNode.value) return;
。基本上,在其他内部,您需要检查该值是否等于或大于。现在,您无需检查。
insert(value) {
const newNode = new Node(value);
if (this.root === null) this.root = newNode;
let currentNode = this.root;
while (currentNode !== null) {
if (value < currentNode.value) {
if (currentNode.left === null) currentNode.left = newNode;
currentNode = currentNode.left;
} else {
if (value === currentNode.value) return false;
if (currentNode.right === null) currentNode.right = newNode;
currentNode = currentNode.right;
}
}
}
答案 1 :(得分:0)
这是您可以尝试的另一种插入方法
pickup_loc = "oc"