课堂笔记:树表的查找技术:平衡二叉树(AVL树)

平衡二叉树:或者是一棵空的二叉排序树,或者是具有下列性质的二叉排序树:
⑴ 根结点的左子树和右子树的深度最多相差1;
⑵ 根结点的左子树和右子树也都是平衡二叉树。
平衡因子:结点的平衡因子是该结点的左子树的深度与右子树的深度之差。
结点的平衡因子=HL-HR
在平衡树中,结点的平衡因子可以是10-1
最小不平衡子树:在平衡二叉树的构造过程中,以距离插入结点最近的、且平衡因子的绝对值大于1的结点为根的子树。
基本思想: 在构造二叉排序树的过程中,每插入一个结点时,首先检查是否因插入而破坏了树的平衡性, 若是, 则找出最小不平衡子树, 在保持二叉排序树特性的前提下,调整最小不平衡子树中各结点之间的链接关系,进行相应的旋转,使之成为新的平衡子树。
设结点A为最小不平衡子树的根结点,对该子树进行平衡调整归纳起来有以下四种情况:1、LL型 2、RR型 3、LR型 4、RL型
平衡二叉树——LL型
在这里插入图片描述

B=A->lchild;  
A->lchild=B->rchild;   
B->rchild=A; 
A->bf=0;   
B->bf=0
if (FA==NULL)   
	root=B;   
else  if (A==FA->lchild)    
	FA->lchild=B;  
else  
	FA->rchild=B; 

平衡二叉树——RR型
在这里插入图片描述

B=A->rchild;  
A->rchild=B->lchild;  
B->lchild=A;  
A->bf=0;   
B->bf=0
if (FA==NULL)      
	root=B;else  if (A==FA->lchild)      
	FA->lchild=B;else     
	FA->rchild=B; 

平衡二叉树——LR型
在这里插入图片描述

B=A->lchild;
C=B->rchild;   
B->rchild=C->lchild;   
A->lchild=C->rchild;   
C->lchild=B;    
C->rchild=A; 

平衡二叉树——RL型
在这里插入图片描述

B=A->rchild;    
C=B->lchild;   
B->lchild=C->rchild;   
A->rchild=C->lchild;   
C->lchild=A;  
C->rchild=B; 

综上所述, 在一个平衡二叉排序树上插入一个新结点S时,主要包括以下三步:
(1) 查找应插位置, 同时记录离插入位置最近的可能失衡结点A(A的平衡因子不等于0)。
(2) 插入新结点S, 并修改从A到S路径上各结点的平衡因子。
(3) 根据A、 B的平衡因子, 判断是否失衡以及失衡类型, 并做相应处理。

发布了48 篇原创文章 · 获赞 25 · 访问量 2453

猜你喜欢

转载自blog.csdn.net/qq_43628959/article/details/104270428