【问题标题】:BinarySearchTree's insert function in javascriptBinarySearchTree 在 javascript 中的插入函数
【发布时间】:2019-03-08 13:49:08
【问题描述】:

我正在使用 javascript 构建 BinarySearchTree

但是我的代码中的插入函数不能运行我想要的

我的理想结果是

{"value":9,"left":{"value":4,"left":{"value":1,"left":null,"right":null},"right":{ "value":6,"left":null,"right":null}},"right":{"value":20,"left":{"value":15,"left":null,"right ":null},"right":{"value":170,"left":null,"right":null}}}

但我的结果是

'{"value":9,"left":null,"right":{"left":null,"right":{"left":null,"right":{"left":null, "right":{"left":null,"right":{"left":null,"right":{"left":null,"right":null}}}}}}}'

我认为问题出在我的插入函数中

这是我的 JS:

  
      class Node {
        constructor(value){
        this.left = null;
        this.right = null;
        this.value = value;
      }
     }

class BinarySearchTree {
  constructor(){
    this.root = null;
  }
  insert(value){
    var root=this.root
    if(!root){
      this.root=new Node(value)
    }else{
      var currentNode=root;
      var newNode=new Node(value)
      while(currentNode){
      if(value<currentNode.value){
        if(!currentNode.left){
          currentNode.left=new Node;
          break;
        }
        else{
          currentNode=currentNode.left;
        }
       }else{
        if(!currentNode.right){
          currentNode.right=new Node;
           break;
        }else{
          currentNode=currentNode.right
        }
      }
    }
  }

  }
  lookup(value){
     var root=this.root
     var searchNode = new Node(value)
     if(!this.root){
        return null;
      }
    if(searchNode===root){
       return root
    }else{
   if(searchNode.value>root){
       return root.right.value
      }else{
        return root.left.value
      }
    }
   }
   }

  const tree = new BinarySearchTree();
  tree.insert(9)
  tree.insert(4)
  tree.insert(6)
  tree.insert(20)
  tree.insert(170)
  tree.insert(15)
  tree.insert(1)
  JSON.stringify(traverse(tree.root))

  //     9
 //  4     20
 //1  6  15  170

  function traverse(node) {
  const tree = { value: node.value };
  tree.left = node.left === null ? null : traverse(node.left);
  tree.right = node.right === null ? null : traverse(node.right);
  return tree;
  }

【问题讨论】:

  • 只过滤掉所有空项...
  • newNode 不是new Node

标签: javascript binary-search-tree


【解决方案1】:

您的Node class 被实例化为newNode,因此将所有new Node 更改为newNode *当然new Node 的第一个实例除外

var newNode=new Node(value) // Leave this one alone and fix the rest
var searchNode = new Node(value) // Leave this one alone as well

var insertNode = function(node, newNode) {
  if (newNode.key < node.key) { 
    if (node.left === null) { 
      node.left = newNode; 
    } else {
      insertNode(node.left, newNode); 
    }
  } else {
    if (node.right === null) {
      node.right = newNode; 
    } else {
      insertNode(node.right, newNode); 
    }
  }
};

【讨论】:

  • 没问题,BST 看起来很眼熟,然后我记得它来自我读过的电子书?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多