我正在研究红黑树,我正在阅读Cormen"算法导论"书。现在我尝试使用书中描述的伪代码 - RB-INSERT-FIXUP(T,z)创建数字为1-10的红黑树。这是截图
一切都很好,直到我插入数字" 6"进入树。根据伪代码我得到以下结果
正如你所看到的所有红黑树要求都已满足,但我很困惑,因为我知道每一步都应该平衡红黑树。
我可以手动执行"左旋" " 2"和" 4"并改变颜色。在这种情况下,我将得到以下结果,这是适当平衡的
所以我的问题是:
是否可以使用不平衡的树?或者在插入节点期间我遗漏了什么?
答案 0 :(得分:8)
这很好。红黑树是平衡的,但不一定完美。确切地说,红黑树的属性保证到叶子的最长路径(隐含的,未在图片中显示)最多是最短路径的两倍。最短的一个具有长度2(2 - > 1 - >叶子),最长的一个具有长度4(2 - > 4 - > 5 - > 6 - >叶子),因此不变量确实成立。
答案 1 :(得分:0)
它们不平衡,因为它们不满足平衡的树属性:
如果二叉树认为每个节点的左子树中的内部节点数与右子树中的内部节点数最多相差1,则该树是平衡的。
有些书称其为“近似平衡”,因为保证了对数时间的添加/删除/搜索操作。 (平衡树是AVL树。)