【C++】二叉搜索树之--红黑树

        红黑树,是二叉搜索树的一种,它的每个节点只有红色黑色,从而达到接近平衡的目的。

红黑树的性质:

·根节点都是黑色节点

·每个节点不是黑的就是红的

·如果一个节点是红的,那么它的两个孩子都是黑的

·不能右两个连续的红色节点

·每条路径下,黑色节点的数量都是相等的

·叶子节点都是黑色节点(这里指空节点)

·根节点到叶子节点最长的路径,最多是最短路径的2倍(最短路径都是黑子,最长路径是一黑一红)

红黑树的原理:

和AVL树不一样的是,没有平衡因子,而是节点的结构体中添加了颜色,默认新增节点为红色。

这时候平衡就需要看叔叔节点,也就是父亲节点的兄弟。

我们以右旋为例,父亲在爷爷的左边,当父亲节点存在且为红时,进入场景

场景一:叔叔存在且为红 -- 变色

把父亲和叔叔变黑,爷爷变红,孩子变爷爷,继续往上直到根节点,注意最后根节点变黑。

场景二:叔叔不存在或者存在且为黑色,孩子在父亲的左边 -- 右单旋

爷爷节点右旋下来,父亲变黑,爷爷变红。

场景三:叔叔不存在或者存在且为黑色,孩子在父亲的右边 -- 左右双旋

父亲先左旋,然后到爷爷右旋,爷爷变红,孩子变黑。

方向相反的则反之。

可以观察到,每条路径的黑色节点数目都是相等的。

红黑树与AVL树的比较:

        红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O( logN),红黑树不追求绝对平衡,其只需保证最长路径不超过最短路径的2倍,相对而言,降低了插入和旋转的次数,所以在经常进行增删的结构中性能比AVL树更优,而且红黑树实现比较简单,所以实际运用中红黑树更多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值