数据结构之红黑树

目录

一、什么是红黑树

1.1 红黑树的规则

1.2 红黑树的特性

二、红黑树的插入

2.0 插入思路

2.1 情况一

2.2 情况二

2.3 情况三

2.2 插入代码


一、什么是红黑树

红黑树是一种特殊的二叉搜索树,它在每个节点上增加了一个颜色属性,可以是红色或黑色。

1.1 红黑树的规则

  • 每个节点要么是黑色要么是红色。
  • 根节点是黑色
  • 每个叶子节点(NIL节点,空节点)是黑色。
  • 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
  • 如果⼀个结点是红⾊的,则它的两个孩⼦结点必须是黑色的,也就是说任意⼀条路径不会有连续的红⾊结点。
enum colour
{
	RED,
	BLACK
};

template
struct RBTreeNode
{
	pair _kv;
	RBTreeNode* _left;
	RBTreeNode* _right;
	RBTreeNode* _parent;
	colour _col;

	//三叉链
	RBTreeNode(const pair& kv)
		:_kv(kv)
		,_left(nullptr)
		,_right(nullptr)
		,_parent(nullptr)
	{}
};

1.2 红黑树的特性

假设从根节点开始到NULL节点最短的路径高度为bh,则红黑树的总高度h满足:bh <= h <= 2*bh。

二、红黑树的插入

2.0 插入思路

总体思路:

  • 先按照搜索二叉树的规则进行插入,然后通过一系列操作使之满足红黑树的规则。
  • 如果是空树插入,新增结点是黑色结点。如果是非空树插⼊,新增结点必须红色结点
    if (_root == nullptr)
    {
    	_root = new N

你可能感兴趣的:(C++,数据结构)