【发布时间】: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