JavaScript中的bst递归

时间:2019-03-04 06:18:13

标签: javascript

我正在创建一个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;
      }
    }
  }
 }
 
 

2 个答案:

答案 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"