红黑树并没有我们想象的那么难(下)
这篇讲的是红黑树如何“落地”到我们常用的STL map中。作者从SGI STL源码出发,直接剖析红黑树底层类`_Rb_tree`的实现细节。 文章亮点在于对核心机制的拆解。首先解释了`_M_header`这个辅助头节点的巧妙设计,它同时维护根节点、最小与最大节点,让管理变得规整。重点展开的是两种插入策略:`insert_equal()`允许重复值,逻辑直白;而`insert_unique()`的去重判断则颇为精巧,它利用二叉搜索树性质,在寻找插入位置时通过一次向右再持续向左的走位,结合对前驱节点的比较,就能“hack”地判断出键值是否已存在。 最后,文章也回应了“为何用红黑树而非AVL树”这个经典问题,点明红黑树在搜索效率与修改开销(插入至多两次旋转)之间取得了更好的平衡,是一种实用主义的折中方案。作者通过源码把红黑树从理论概念带到了具体的工业级实现,让那些“旋转”、“着色”的抽象描述变得清晰可触。