二叉搜索树—RBTree(红黑树)
2016-08-09 21:44
218 查看
红黑树又称二叉搜索树,它主要是通过红和黑两种颜色(red、black)来标识节点。通过对任何一条从根节点到叶子节点路径上的节点颜色进行约束,红黑树保证最长路径不超过最短路径的两倍,所以说:红黑树是近似于平衡的。
■下面是红黑树的主要特点:
(1)红黑树的根节点是黑色的。
(2)红黑树中若一个节点是红色的,则它的两个子节点必须是黑色的。
(3)红黑树中从该节点到后代叶节点的路径上,黑色节点数目是相同的。
◆红黑树的应用:
C++库、linux内核、java库等
◆红黑树与AVL树的区别:
红黑树和AVL树都是高效的平衡搜索树,时间复杂度都是O(lgN);
红黑树对平衡的要求不是特别高,它只需要满足最长路径不超过最短路径的两倍,所以性能相对较高。
■下面是红黑树中节点结构:
[code=cpp;toolbar:false">enum color //枚举节点的两种颜色
{
RED,
BLACK,
};
template <class K, class V>
struct RBTreeNode
{
color _col;
RBTreeNode<K, V>* _left;
RBTreeNode<K, V>* _right;
RBTreeNode<K, V>* _parent;
K _key;
V _value;
RBTreeNode(const K& key, const V& value)
:_key(key)
, _value(value)
, _left(NULL)
, _right(NULL)
, _parent(NULL)
, _col(RED) //颜色必须插入的是红色,因为要保证黑色节点的个数是平衡的
{ }
};
■下面是红黑树的主要特点:
(1)红黑树的根节点是黑色的。
(2)红黑树中若一个节点是红色的,则它的两个子节点必须是黑色的。
(3)红黑树中从该节点到后代叶节点的路径上,黑色节点数目是相同的。
◆红黑树的应用:
C++库、linux内核、java库等
◆红黑树与AVL树的区别:
红黑树和AVL树都是高效的平衡搜索树,时间复杂度都是O(lgN);
红黑树对平衡的要求不是特别高,它只需要满足最长路径不超过最短路径的两倍,所以性能相对较高。
■下面是红黑树中节点结构:
[code=cpp;toolbar:false">enum color //枚举节点的两种颜色
{
RED,
BLACK,
};
template <class K, class V>
struct RBTreeNode
{
color _col;
RBTreeNode<K, V>* _left;
RBTreeNode<K, V>* _right;
RBTreeNode<K, V>* _parent;
K _key;
V _value;
RBTreeNode(const K& key, const V& value)
:_key(key)
, _value(value)
, _left(NULL)
, _right(NULL)
, _parent(NULL)
, _col(RED) //颜色必须插入的是红色,因为要保证黑色节点的个数是平衡的
{ }
};
相关文章推荐
- 二叉搜索树—RBTree(红黑树)
- PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
- (转)nginx源码剖析-红黑树ngx_rbtree_t
- B-Tree 漫谈 (从二叉树到二叉搜索树到平衡树到红黑树到B树到B+树到B*树)
- 红黑树RBTree
- 数据结构-树(多叉树、二叉树、二叉搜索树、平衡二叉树、字典树、红黑树、线段树)
- 菜鸟nginx源码剖析数据结构篇(四)红黑树ngx_rbtree_t
- 非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树
- nginx源码剖析-红黑树ngx_rbtree_t(添加lookup操作)
- 红黑树(RBtree)
- 数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树
- 二叉搜索树、AVL树、B-树、B+树、B*树、红黑树
- RBtree详解之删除(含完整红黑树代码)
- 红黑树实现(二叉搜索树)
- 关于树的总结从二叉树->二叉搜索树->平衡二叉树->红黑树->B树与B+树
- 平衡搜索树—红黑树RBTree
- 红黑树--RBTree
- 【数据结构】中的红黑树-RBTree
- 二叉搜索树之红黑树
- RBTree(红黑树)