- Notifications
You must be signed in to change notification settings - Fork932
Closed
Description
If the newParent.left previous is exist, we will lose it;
functionleftRotation(node){constnewParent=node.right;// E.g., node 3constgrandparent=node.parent;// E.g., node 1// swap node 1 left child from 2 to 3.swapParentChild(node,newParent,grandparent);// Update node 3 left child to be 2, and// updates node 2 parent to be node 3 (instead of 1).newParent.setLeftAndUpdateParent(node);// remove node 2 left child (previouly was node 3)node.setRightAndUpdateParent(null);returnnewParent;}functionsetLeftAndUpdateParent(node){this.left=node;if(node){node.parent=this;node.parentSide=LEFT;}}
If we do this:newParent.setLeftAndUpdateParent(node); inleftRotation, and
this.left = node; insetLeftAndUpdateParent,
we will lose the left of newParent.
I think the above should write as follow.
functionleftRotation(node){constnewParent=node.right;// E.g., node 3constgrandparent=node.parent;// E.g., node 1constpreviousLeft=newParent.left;// swap node 1 left child from 2 to 3.swapParentChild(node,newParent,grandparent);// Update node 3 left child to be 2, and// updates node 2 parent to be node 3 (instead of 1).newParent.setLeftAndUpdateParent(node);// remove node 2 left child (previouly was node 3)node.setRightAndUpdateParent(previousLeft);returnnewParent;}
Add this:const previousLeft = newParent.left; andnode.setRightAndUpdateParent(previousLeft);
right? Maybe I am wrong.
Metadata
Metadata
Assignees
Labels
No labels