AVL树的四种旋转

文章目录


在这里插入图片描述

左单旋

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;

		//6个连接
		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;	
	}
发布了80 篇原创文章 · 获赞 7 · 访问量 3783

猜你喜欢

转载自blog.csdn.net/qq_44905386/article/details/104946121