mirror of
https://github.moeyy.xyz/https://github.com/trekhleb/javascript-algorithms.git
synced 2024-12-26 23:21:18 +08:00
Fix BST removal method (#74)
* Fix LinkedList * Fix the prepend method for the LinkedList * Fix the remove method for the MinHeap * Correct a comment * Fix BST removal method
This commit is contained in:
parent
e558231474
commit
bd5a16be71
@ -94,8 +94,13 @@ export default class BinarySearchTreeNode extends BinaryTreeNode {
|
||||
|
||||
if (!nodeToRemove.left && !nodeToRemove.right) {
|
||||
// Node is a leaf and thus has no children.
|
||||
// Just remove the pointer to this node from the parent node.
|
||||
if (parent) {
|
||||
// Node has a parent. Just remove the pointer to this node from the parent.
|
||||
parent.removeChild(nodeToRemove);
|
||||
} else {
|
||||
// Node has no parent. Just erase current node value.
|
||||
nodeToRemove.value = null;
|
||||
}
|
||||
} else if (nodeToRemove.left && nodeToRemove.right) {
|
||||
// Node has two children.
|
||||
// Find the next biggest value (minimum value in the right branch)
|
||||
@ -113,11 +118,10 @@ export default class BinarySearchTreeNode extends BinaryTreeNode {
|
||||
} else {
|
||||
// Node has only one child.
|
||||
// Make this child to be a direct child of current node's parent.
|
||||
if (nodeToRemove.left) {
|
||||
parent.replaceChild(nodeToRemove, nodeToRemove.left);
|
||||
} else {
|
||||
parent.replaceChild(nodeToRemove, nodeToRemove.right);
|
||||
}
|
||||
const child = nodeToRemove.left || nodeToRemove.right;
|
||||
nodeToRemove.value = child.value;
|
||||
nodeToRemove.setLeft(child.left);
|
||||
nodeToRemove.setRight(child.right);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -185,6 +185,21 @@ describe('BinarySearchTreeNode', () => {
|
||||
expect(bstRootNode.toString()).toBe('30');
|
||||
});
|
||||
|
||||
it('should remove node with no parent', () => {
|
||||
const bstRootNode = new BinarySearchTreeNode();
|
||||
expect(bstRootNode.toString()).toBe('');
|
||||
|
||||
bstRootNode.insert(1);
|
||||
bstRootNode.insert(2);
|
||||
expect(bstRootNode.toString()).toBe('1,2');
|
||||
|
||||
bstRootNode.remove(1);
|
||||
expect(bstRootNode.toString()).toBe('2');
|
||||
|
||||
bstRootNode.remove(2);
|
||||
expect(bstRootNode.toString()).toBe('');
|
||||
});
|
||||
|
||||
it('should throw error when trying to remove not existing node', () => {
|
||||
const bstRootNode = new BinarySearchTreeNode();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user