Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbd5a16b

Browse files
m-maksyutintrekhleb
authored andcommitted
Fix BST removal method (trekhleb#74)
* Fix LinkedList* Fix the prepend method for the LinkedList* Fix the remove method for the MinHeap* Correct a comment* Fix BST removal method
1 parente558231 commitbd5a16b

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

‎src/data-structures/tree/binary-search-tree/BinarySearchTreeNode.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,13 @@ export default class BinarySearchTreeNode extends BinaryTreeNode {
9494

9595
if(!nodeToRemove.left&&!nodeToRemove.right){
9696
// Node is a leaf and thus has no children.
97-
// Just remove the pointer to this node from the parent node.
98-
parent.removeChild(nodeToRemove);
97+
if(parent){
98+
// Node has a parent. Just remove the pointer to this node from the parent.
99+
parent.removeChild(nodeToRemove);
100+
}else{
101+
// Node has no parent. Just erase current node value.
102+
nodeToRemove.value=null;
103+
}
99104
}elseif(nodeToRemove.left&&nodeToRemove.right){
100105
// Node has two children.
101106
// Find the next biggest value (minimum value in the right branch)
@@ -113,11 +118,10 @@ export default class BinarySearchTreeNode extends BinaryTreeNode {
113118
}else{
114119
// Node has only one child.
115120
// Make this child to be a direct child of current node's parent.
116-
if(nodeToRemove.left){
117-
parent.replaceChild(nodeToRemove,nodeToRemove.left);
118-
}else{
119-
parent.replaceChild(nodeToRemove,nodeToRemove.right);
120-
}
121+
constchild=nodeToRemove.left||nodeToRemove.right;
122+
nodeToRemove.value=child.value;
123+
nodeToRemove.setLeft(child.left);
124+
nodeToRemove.setRight(child.right);
121125
}
122126

123127
returntrue;

‎src/data-structures/tree/binary-search-tree/__test__/BinarySearchTreeNode.test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,21 @@ describe('BinarySearchTreeNode', () => {
185185
expect(bstRootNode.toString()).toBe('30');
186186
});
187187

188+
it('should remove node with no parent',()=>{
189+
constbstRootNode=newBinarySearchTreeNode();
190+
expect(bstRootNode.toString()).toBe('');
191+
192+
bstRootNode.insert(1);
193+
bstRootNode.insert(2);
194+
expect(bstRootNode.toString()).toBe('1,2');
195+
196+
bstRootNode.remove(1);
197+
expect(bstRootNode.toString()).toBe('2');
198+
199+
bstRootNode.remove(2);
200+
expect(bstRootNode.toString()).toBe('');
201+
});
202+
188203
it('should throw error when trying to remove not existing node',()=>{
189204
constbstRootNode=newBinarySearchTreeNode();
190205

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp