红黑树

红黑树的插入
红黑树的定义

红黑树首先是一棵二叉查找树(BST),并且符合以下规则:

  1. 节点是红色或黑色的
  2. 根节点是黑色的
  3. 叶子节点是黑色的空节点
  4. 红色节点的2个子节点一定是黑色的(不能出现红红相邻)
  5. 任一节点到叶子节点的每条路径中,黑色节点的数目相同
特性

红黑树是一棵相对平衡的BST,从根节点到叶子节点的最长路径,不超过最短路径的2倍

红黑树的变换

主要分2种,变色和旋转,都不影响BST的规则。旋转分为左旋和右旋:

  • 左旋是右孩子替代父节点的位置,父节点变成右孩子的左孩子,如果右孩子已经有左孩子,将左孩子放到父节点的右孩子
  • 右旋是左孩子替代父节点的位置,父节点变成左孩子的右孩子,如果左孩子已经有右孩子,将右孩子放到父节点的左孩子
破坏规则的情况及解决

红黑树新插入节点总是红色的

  1. 插入节点是根节点,直接置为黑色
  2. 父红叔红祖黑:变色,使父黑叔黑祖红,如果祖的父是红色的,按照2,3,4递归处理
  3. 父红叔黑祖黑,且为父的左孩子:先变色后右旋,使父黑祖红,再以祖为根右旋
  4. 父红叔黑祖黑,且为父的右孩子:先以父为根左旋,这时候就变成了3了,按照3处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值