El primero publicado antes de escribir un blog, está a la izquierda y la mano derecha del árbol AVL para zurdos y diestros de este blog se suma a la de la adición de nodos cuando hay un solo tornillo y de doble tornillo, este artículo introduce la doble giro
ambidiestro árbol AVL
Doble a la izquierda y giro a la derecha de doble giro de doble giro a la izquierda y la derecha
giro único en todo: en torno a dos giro a la izquierda solo giro, gire giro solo derecho, que es a las agujas del reloj rotación, rotación luego en sentido contrario
void RotateLR(Node* parent)
{
Node* subL = parent->_left;
Node* subLR = parent->_right;
//旋转之前保存subLR的平衡因子,旋转完成后,需要根据该平衡因子调整其他节点的平衡因子
int bf = subLR->_bf;
//先对30进行左单旋
RatateL(parent->_left)
//再对90进行右单旋
RatateR(parent);
if (bf == 1)
subL->_bf = -1;
else if (bf == -1)
parent->_bf = 1;
}
Ambidiestro derecha-izquierda: giro a la derecha de un solo primer nodo, y después se dejó sola rotación, es decir, la rotación en sentido antihorario es la primera, la rotación en sentido horario
void RotateRL(Node* parent)
{
Node* subR = parent->_right;
Node* subRL = parent->_left;
//旋转之前保存subLR的平衡因子,旋转完成后,需要根据该平衡因子调整其他节点的平衡因子
int bf = subRL->_bf;
//以90为中心进行右旋
RotateR(parent->_right);
//以30为中心进行左旋
RotateL(parent);
if (bf == 1)
{
subRL->_bf = 0;
parent->_bf = -1;
subR->_bf = 0;
}
else if(bf==-1)
{
subRL->_bf = 0;
parent->_bf = 0;
subR->_bf = 1;
}
else if (bf == 0)
{
subRL->_bf = 0;
parent->_bf = 0;
subR->_bf = 0;
}
}