javascript-algorithms icon indicating copy to clipboard operation
javascript-algorithms copied to clipboard

Bug in AVL Tree rorateLeftLeft and rotateRightRight

Open venusliang opened this issue 5 years ago • 2 comments

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);
  }

venusliang avatar Mar 14 '19 09:03 venusliang

I found the problem too

SHISME avatar Mar 20 '19 07:03 SHISME

find +1

oushu1tanqiang1 avatar Aug 15 '23 04:08 oushu1tanqiang1