红黑树

Insert

  • 插入还是比较简单的
  • 主要就是 NIL判断
  1. 首先判断parent 是否为黑色,是结束
  2. parent.color= 红色//
  3. uncle.color 是否为红色, 是,parent.color = uncle.color = 黑色,grantparent.color = 红色,重复2
  4. uncle.color 黑色, 判断,grant 和当前节点,是否都是 其 父亲的同一边节点,如
  5. 是同一边,则 rotate 变化 parent.color= 黑色,grantParent 为红色,结束。

delete

  • 几种情况,列举法

要删除的节点是红色,直接掠过

要删除的节点是黑色,child 是红色,则child 变黑色

sibling 为红色 ,则旋转 为parent 为红色,这个我一直没看懂

如果所有都是黑色,parent, sibling, sibling.leftTree, sibling.rightTree.则 sibling变红, 结束。重复上一步

如果parent 是红色,sibling, sibling.leftTree, sibling.rightTree.则 sibling 黑色.则 parent sibling 交换颜色。结束

如果 sibling 左儿子是红色,N是parent 的左儿子,则 SL右旋转。

如果 sibling 是黑色,右儿子是红色,N是parent 的左儿子。 在S做左旋转。结束。(p是红色,sibling 的儿子都是红色,包含在这里)

  • sibling 是红色
  • p 是红色,其余是黑色
  • p 是红色
    • sibling 的 child 颜色问题。
    • 旋转
  • 4种情况。
    eiπ+1=0eiπ+1=0