|
NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
|
自平衡二叉搜索树实现 更多...
类 | |
| struct | rb_tree_node_base |
| 红黑树节点基类 更多... | |
| struct | rb_tree_node< T > |
| 红黑树数据节点 更多... | |
| struct | rb_tree_base_iterator |
| 红黑树迭代器基类 更多... | |
| struct | rb_tree_iterator< IsConst, RbTree > |
| 红黑树迭代器 更多... | |
| class | rb_tree< Key, Value, KeyOfValue, Compare, Alloc > |
| 红黑树容器 更多... | |
函数 | |
| NEFORCE_ALWAYS_INLINE_INLINE void | rb_tree_rotate_left (rb_tree_node_base *axis, rb_tree_node_base *&root) noexcept |
| 红黑树左旋转 | |
| NEFORCE_ALWAYS_INLINE_INLINE void | rb_tree_rotate_right (rb_tree_node_base *axis, rb_tree_node_base *&root) noexcept |
| 红黑树右旋转 | |
| NEFORCE_ALWAYS_INLINE_INLINE void | rb_tree_insert_rebalance (rb_tree_node_base *insert, rb_tree_node_base *&root) noexcept |
| 插入节点后重新平衡红黑树 | |
| NEFORCE_ALWAYS_INLINE_INLINE rb_tree_node_base * | rb_tree_erase_rebalance (rb_tree_node_base *erase, rb_tree_node_base *&root, rb_tree_node_base *&leftmost, rb_tree_node_base *&rightmost) noexcept |
| 删除节点后重新平衡红黑树 | |
变量 | |
| NEFORCE_INLINE17 constexpr bool | RB_TREE_RED = false |
| 红黑树节点颜色常量:红色 | |
| NEFORCE_INLINE17 constexpr bool | RB_TREE_BLACK = true |
| 红黑树节点颜色常量:黑色 | |
自平衡二叉搜索树实现
本实现严格遵循以下计算机科学文献:
根据 Guibas & Sedgewick (1978) 的定义,红黑树满足以下五条性质:
根据红黑树性质,最坏情况下的时间复杂度保证:
| 操作 | 时间复杂度 | 说明 |
|---|---|---|
| 插入 | O(log n) | 最多 2 次旋转 |
| 删除 | O(log n) | 最多 3 次旋转 |
| 查找 | O(log n) | 二叉搜索树查找 |
| 最小/最大 | O(log n) | 沿最左/最右路径查找 |
| 前驱/后继 | O(log n) | 中序遍历相邻节点 |
| 范围迭代 | O(k) | k 为范围内元素数量 |
树的高度上界:h ≤ 2 log₂(n + 1)。
|
noexcept |
删除节点后重新平衡红黑树
| erase | 要删除的节点 |
| root | 树根节点引用 |
| leftmost | 最左节点引用 |
| rightmost | 最右节点引用 |
执行节点删除后的重新平衡操作,并更新最左最右节点。
在文件 rb_tree.hpp 第 239 行定义.
引用了 rb_tree_node_base::color_, erase(), rb_tree_node_base::left_, rb_tree_node_base::maximum(), rb_tree_node_base::minimum(), NEFORCE_DEBUG_VERIFY, rb_tree_node_base::parent_, RB_TREE_BLACK, RB_TREE_RED, rb_tree_rotate_left(), rb_tree_rotate_right(), rb_tree_node_base::right_ , 以及 swap().
被这些函数引用 rb_tree< Key, pair< const Key, T >, select1st< pair< const Key, T > >, Compare, Alloc >::erase().
|
noexcept |
插入节点后重新平衡红黑树
| insert | 新插入的节点 |
| root | 树根节点引用 |
通过旋转和重新着色恢复红黑树的平衡性质。
在文件 rb_tree.hpp 第 186 行定义.
引用了 rb_tree_node_base::color_, rb_tree_node_base::left_, rb_tree_node_base::parent_, RB_TREE_BLACK, RB_TREE_RED, rb_tree_rotate_left(), rb_tree_rotate_right() , 以及 rb_tree_node_base::right_.
|
noexcept |
红黑树左旋转
| axis | 旋转轴节点 |
| root | 树根节点引用 |
执行左旋转操作,保持红黑树性质。
在文件 rb_tree.hpp 第 131 行定义.
引用了 rb_tree_node_base::left_, rb_tree_node_base::parent_ , 以及 rb_tree_node_base::right_.
被这些函数引用 rb_tree_erase_rebalance() , 以及 rb_tree_insert_rebalance().
|
noexcept |
红黑树右旋转
| axis | 旋转轴节点 |
| root | 树根节点引用 |
执行右旋转操作,保持红黑树性质。
在文件 rb_tree.hpp 第 159 行定义.
引用了 rb_tree_node_base::left_, rb_tree_node_base::parent_ , 以及 rb_tree_node_base::right_.
被这些函数引用 rb_tree_erase_rebalance() , 以及 rb_tree_insert_rebalance().