红黑树插入某个节点的方法

红黑树节点的插入分为两步:第一步与二叉查找树的插入相同,第二步为调整节点着色。  

节点插入  

新节点Z的两个孩子指向NIL,将节点z链入树的正确位置,将节点z着色为红。  

着色调整  

  • Z节点为根节点  

              直接将根着色为黑  

  • Z节点不是根节点  

              因为在插入节点z之前,z的父节点的一个孩子是NIL(黑高为1),所以节点z的兄弟节点的黑高必定为1。  

  • Z的父节点是黑色  

              无需调整着色  

  • Z的父节点是红色  

             此时Z的叔叔节点的黑高必定为1.

  • Z的叔叔节点是红色  

             此时Z的祖父节点必定为黑,将Z的父节点和叔叔节点着色为黑,将祖父节点着色为红,然后从祖父节点位置开始着色调整。示意如下:

  • Z的叔叔节点是黑色

             此时叔叔节点必定为NIL。  

  • z的叔叔是右子树  
  • z是右节点  

             将z的父节点进行左旋,然后从z的左子节点(即未旋转之前的父节点)位置开始重新着色

  • z是左节点  

             将z的父节点着色为黑,将其祖父节点着色为红,对祖父节点进行右旋操作

  • z的叔叔是左子树  
  • z是右节点  

             将z的父节点着色为黑,将其祖父节点着色为红,对祖父节点进行左旋操作

  • z是左节点  

             将z的父节点进行右旋,然后从z的右子节点(即未旋转之前的父节点)位置开始重新着色      

红黑树的节点插入状态转换图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值