左单旋
void leftRorate(pNode parent){
pNode grandParent = parent->_parent;
pNode parentRight = parent->_right;
pNode rightLeft = parentRight->_left;
parentRight->_left = parent;
parent->_parent = parentRight;
parent->_right = rightLeft;
if (rightLeft){
rightLeft->_parent = parent;
}
parentRight->_parent = grandParent;
if (parent != _root){
if (grandParent->_left == parent){
grandParent->_left = parentRight;
}
else{
grandParent->_right = parentRight;
}
}
else{
_root = parentRight;
}
parentRight->_fd = parent->_fd = 0;
}
右单旋
void rightRorate(pNode parent){
pNode grandParent = parent->_parent;
pNode parentLeft = parent->_left;
pNode leftRight = parentLeft->_right;
parentLeft->_right = parent;
parent->_parent = parentLeft;
parent->_left = leftRight;
if (leftRight){
leftRight->_parent = parent;
}
parentLeft->_parent = grandParent;
if (parent != _root){
if (grandParent->_left == parent){
grandParent->_left = parentLeft;
}
else{
grandParent->_right = parentLeft;
}
}
else{
_root = parentLeft;
}
parent->_fd = parentLeft->_fd = 0;
}