平衡二叉树的知识记录。
1.平衡因子。一个二叉树的平衡因子是指左右子树的高度差。HL为左边二叉树的高度,HR为右边二叉树的高度,平衡因子即为HL-HR,注意平衡因子不取绝对值。
2.平衡二叉树。平衡二叉树是指一棵树里面任意结点的左右子树高度差的绝对值不超过1的树,即平衡因子绝对值不超过一的树。
四种平衡变换:
当一棵平衡二叉树中插入一个新节点后变得不平衡了,新插入的节点为破坏节点A,它把某个节点破坏了平衡,则那个被破坏的节点叫做被破坏节点B 。看是什么旋转从被破坏节点B出发,向破坏节点A查看路径走向。
进行变换是为了恢复平衡性,使得因为新加入节点后不平衡的搜索二叉树变得平衡。
统一的策略都是对破坏节点、被破坏节点、它们之间的节点计算平衡因子(自己数即可),让平衡因子数在中间的节点做为父节点,最小的作为左孩子,最大的作为右孩子。
RR变换如下
当破坏节点A和被破坏节点B的所处关系为:破坏节点A为被破坏节点B的右孩子的右孩子时,即需要RR变换(其中的RR值得是破坏节点A和被破坏节点B的关系)。
向下查看,如下图中在BR节点出添加新节点,不论是BR的左孩子还是右孩子,都被认为是RR旋转,因为B是A的右孩子,BR是B的右孩子,在BR下进行的插入,可以把BR归结为破坏节点。
当出现下面的节点不平衡且它的父节点也不平衡时,我们调节最下面的不平衡节点,因为子树平衡了,上面的节点就都平衡了。
LL变换如下
LR变换如下
新插入的是Jan,造成May节点不平衡,RL调整主要是将破坏节点到被破坏节点以及它们中间的连接节点,进行平衡重构,如下图的红圈内。之后他们的孩子也发生相应的变化,原来结构从左到右的孩子节点按顺序添加为新结构的左右节点,这样是为了满足左边小右边大的这样搜索树的条件。
RL变换如下
新加入的节点为Feb,破坏了Aug的平衡状态。
仅做自我学习记录。