[英]Facing problem when removing node from the binary tree?
class Node{ constructor(element){ this.element = element; this.right = null; this.left = null; } } class BST{ constructor(){ this.head = null; } add(element){ var node = new Node(element); if(this.head === null){ this.head = node; }else{ this.insertNode(this.head,node); } } insertNode(node,key){ if(key.element < node.element){ if(node.left === null){ node.left = key; }else{ this.insertNode(node.left,key); } }else{ if(node.right === null){ node.right = key; }else{ this.insertNode(node.right, key); } } } remove(element){ this.head = this.removeNode(this.head,element); } removeNode(node,key){ if(node === null){ return null; }else if(key < node.element){ node.left = this.removeNode(node.left,key); return node; }else if(key > node.element){ node.right = this.removeNode(node.right,key); return node; }else{ if(node.left === null && node.right === null){ node = null; return node; } if(node.left === null){ node = node.right; return node; }else if(node.right === null){ node = node.left; return node; } var temp = this.findMinNode(node.right); node.element = temp.element; node.right = this.removeNode(node.right, temp.element); return node; } } findMinNode(node){ if(node.left === null){ return node; }else{ this.findMinNode(node.left); } } } var bst = new BST(); bst.add(10); bst.add(5); bst.add(3); bst.add(7); bst.add(4); bst.add(2); bst.add(6); bst.add(9); bst.add(8); bst.add(15); bst.add(24); bst.add(22); bst.add(25); bst.add(21); bst.remove(3); console.log(bst);
当我从二叉树中删除节点'5'时,它显示错误'无法读取未定义的属性'元素'但是当我从二叉树中删除节点'3'时它没有显示错误,当时代码正常工作并完美删除节点'3'。
在此处输入代码
class Node{
constructor(element){
this.element = element;
this.right = null;
this.left = null;
}
}
class BST{
constructor(){
this.head = null;
}
add(element){
var node = new Node(element);
if(this.head === null){
this.head = node;
}else{
this.insertNode(this.head,node);
}
}
insertNode(node,key){
if(key.element < node.element){
if(node.left === null){
node.left = key;
}else{
this.insertNode(node.left,key);
}
}else{
if(node.right === null){
node.right = key;
}else{
this.insertNode(node.right, key);
}
}
}
remove(element){
this.head = this.removeNode(this.head,element);
}
removeNode(node,key){
if(node === null){
return null;
}else if(key < node.element){
node.left = this.removeNode(node.left,key);
return node;
}else if(key > node.element){
node.right = this.removeNode(node.right,key);
return node;
}else{
if(node.left === null && node.right === null){
node = null;
return node;
}
if(node.left === null){
node = node.right;
return node;
}else if(node.right === null){
node = node.left;
return node;
}
var temp = this.findMinNode(node.right);
node.element = temp.element;
node.right = this.removeNode(node.right, temp.element);
return node;
}
}
findMinNode(node){
if(node.left === null){
return node;
}else{
this.findMinNode(node.left);
}
}
}
var bst = new BST();
bst.add(10);
bst.add(5);
bst.add(3);
bst.add(7);
bst.add(4);
bst.add(2);
bst.add(6);
bst.add(9);
bst.add(8);
bst.add(15);
bst.add(24);
bst.add(22);
bst.add(25);
bst.add(21);
bst.remove(5);
console.log(bst);
output:用于从二叉树中删除节点 5
node.element = temp.element;
^
TypeError: Cannot read property 'element' of undefined
output:用于从二叉树中删除节点 3。
BST {
head: Node {
element: 10,
right: Node { element: 15, right: [Node], left: null },
left: Node { element: 5, right: [Node], left: [Node] }
}
}
问题出在findMinNode
方法中。 您可能忘记在else
语句中添加return
:
findMinNode(node) {
if (node.left === null) {
return node;
} else {
// return the value of recursive call
return this.findMinNode(node.left);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.