javascript-algorithms
javascript-algorithms copied to clipboard
Bug in AVL Tree rorateLeftLeft and rotateRightRight
run code
const avl = new AvlTree();
avl.insert(24);
avl.insert(12);
avl.insert(34);
avl.insert(26);
avl.insert(25);
console.log(avl.toString()); // output: 25,26,34,24,34
left child 12 is modified to a duplicate value 34.
const avl = new AvlTree();
avl.insert(24);
avl.insert(12);
avl.insert(34);
avl.insert(15);
avl.insert(18);
console.log(avl.toString()); // output: 12,24,12,15,18
same question. fix code:
rotateLeftLeft(rootNode) {
// Detach left node from root node.
const leftNode = rootNode.left;
rootNode.setLeft(null);
// Make left node to be a child of rootNode's parent.
if (rootNode.parent) {
rootNode.parent.replaceChild(rootNode, leftNode);
} else if (rootNode === this.root) {
// If root node is root then make left node to be a new root.
this.root = leftNode;
}
// If left node has a right child then detach it and
// attach it as a left child for rootNode.
if (leftNode.right) {
rootNode.setLeft(leftNode.right);
}
// Attach rootNode to the right of leftNode.
leftNode.setRight(rootNode);
}
rotateRightRight(rootNode) {
// Detach right node from root node.
const rightNode = rootNode.right;
rootNode.setRight(null);
// Make right node to be a child of rootNode's parent.
if (rootNode.parent) {
rootNode.parent.replaceChild(rootNode, rightNode);
} else if (rootNode === this.root) {
// If root node is root then make right node to be a new root.
this.root = rightNode;
}
// If right node has a left child then detach it and
// attach it as a right child for rootNode.
if (rightNode.left) {
rootNode.setRight(rightNode.left);
}
// Attach rootNode to the left of rightNode.
rightNode.setLeft(rootNode);
}
I found the problem too
find +1