红黑树和 AVL 树的旋转调整以及性能分析

本文详细介绍了AVL树的节点定义、旋转分类及其特点与性能分析,包括右单旋、左单旋和双旋等。接着探讨了红黑树的引入原因、特性、插入操作及旋转调整,强调了红黑树在实际应用中的优势。内容涵盖两种平衡二叉搜索树的验证方法和应用场景。
摘要由CSDN通过智能技术生成

一、AVL 平衡搜索树

二叉搜索树虽可以缩短查找的效率,但如果数据极端,退化为链表,搜索时间复杂度为O(N),所以引入了ALV树,在二叉搜索树的基础加入平衡因子

平衡因子:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1

1、节点定义

template<class T>
struct AVLTreeNode{
   
	AVLTreeNode(const T& data)
		: _pLeft(nullptr)
		, _pRight(nullptr)
		, _pParent(nullptr)
		, _data(data)
		, _bf(0)//平衡因子,初始值为0,默认已经平衡
	{
   }
	AVLTreeNode<T>* _pLeft; // 该节点的左孩子
	AVLTreeNode<T>* _pRight; // 该节点的右孩子
	AVLTreeNode<T>* _pParent; // 该节点的双亲
	T _data;
	int _bf; // 该节点的平衡因子
};

2、AVL 树旋转分类

2.1. 右单旋

在这里插入图片描述
45节点 的存在与否都不重要,如果40 没有右子树,那么它依然要进行单旋。上面的案列 50 没有双亲节点,如果有父节点,那该怎么调整呢?

就拿上列来说,我们假设 50 还有双亲节点

	void RotateRight1(Node* pParent){
   
		// pParent 代表的是 50 节点
		// pSubL: pParent的左孩子 40
		// pSubLR: pParent左孩子的右孩子 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿的温柔香

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值