[C ++] --AVL ambidiestro árbol

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
Aquí Insertar imagen Descripción

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
Aquí Insertar imagen Descripción

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;
		}
	}
Publicado 33 artículos originales · alabanza ganado 13 · vistas 1056

Supongo que te gusta

Origin blog.csdn.net/Vicky_Cr/article/details/104399013
Recomendado
Clasificación