红黑树,add那里,加入节点之后,经过了几个if之后,怎么向上面传递保持平衡,这里还是不明白
来源:13-8 红黑树的性能测试
qq_马猴_03603137
2022-06-17
写回答
1回答
-
liuyubobobo
2022-06-18
首先明确一点,红黑树中说的平衡,不是 AVL 树中定义的平衡,而是红黑树自己定义的平衡,即黑平衡。(既能按照课程中的方式,转换成一棵 2-3 树。)
打破这种黑平衡的方式,就是“同时出现了两个红节点”,这两个红节点或者以"左右"的形式出现,或者以“左左”的形式出现,或者以一个黑节点的左右节点的形式出现,即下面 ppt 中的 2,3,4 三种情况。
(为什么只有这三种情况?因为我们的红黑树是左倾的,如果有一个本身)有一个红节点,这个红节点一定在一个黑节点的左边。即图1的情况。)
我们的逻辑将所有这种打破黑平衡的情况,最终都在当前子树的范围内,调整成了根节点是红节点的情况,即上面图 5 的情况。即我们把两个红节点化成了一个红节点。
那么这个根节点是红节点的子树,往上回溯,对应到上一层,如果不平衡,一定是在上一层的范围里,再次出现了上图中2,3,4的情况之一,那么就继续这样调整(否则平衡了,就不用调整了。)。
因此一直往上回溯上去,就保持了平衡。
继续加油!:)
032022-06-20