时间:2025-03-16 15:42
人气:
作者:admin
满足以下条件:
1.这是一个正常的,没有碰到极端情况的二叉搜索树。
如果数据是有序的或者在删除,插入操作下,那么可能会退化成一条链。严重影响性能。

在这种情况下可以通过不同的旋转操作来保证树的平衡。
旋转操作是为了将二叉树重新平衡。
在插入或删除的时候,如果节点失衡,平衡因子的绝对值只能是2。

5 和 7 是失衡节点。它们失衡是因为 1 的存在,从节点 5 到 1 有两条边,这是罪魁祸首,只要把 3 作为 1 ,5 的父节点就好了。

但是为什么不把 5 作为 3 ,7 的父节点呢?找离新插入的节点最近的不平衡的树进行调整
为什么要这么操作呢?
AVL树的平衡性是递归定义的。每个节点的左右子树高度差不能超过1。
如果只调整离新插入节点最近的不平衡节点,可以确保该节点的子树恢复平衡,同时更高层的节点也会因为子树高度的调整而自动满足平衡条件。
如果跳过最近的不平衡节点,直接调整更高层的节点,可能会导致低层节点再次失衡,从而需要额外的调整。
对于其它的旋转操作来说,都是为了保证 AVL 树的性质不变。
特性1:节点非黑即红
特性2:根节点一定是黑色
特性3:叶子节点(NIL)一定是黑色
特性4:每个红色节点的两个子节点都为黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
特性5:从任一节点到其每个叶子的所有路径,都包含相同数目的黑色节点。
从以上性质可以知道左右子树的高度差最大的时候是黑红相间,这样的规定使得调整平衡的操作相对于 AVL 比较少。

只好将 7 变红,3 ,9 变黑,同时将注意力放到 7 上递归向上。

只需要保证这棵子树的父节点为黑,并满足上述性质。
将 3 变黑,通过旋转,变为父节点,7 变红。
9 将 3 变红,压力给到 7.可以知道的是上述 AVL 树和红黑树的高度较高,如果数据量较大的情况下,数据在硬盘上,访问一个节点时要进行一次硬盘操作。树高度和访问硬盘的操作正相关。所以我们要压缩树的高度,增加每个节点数据量。



