Js红黑树

98 阅读1分钟

红黑树

自平衡二叉搜索树

性质

  1. 节点不是黑色就是红色
  2. 根节点是黑色
  3. 所有有叶子节点为空节点并且为黑色
  4. 一个节点为红色则两个子节点为黑色不能有相邻的两个红节点
  5. 从给定节点触出发到其后代节点,所有路径包含相同数量的黑色节点

插入操作

插入节点必须为红色,插入节点为N、父节点为P、祖父节点为G、父节点兄弟节点为U

情况一

插入的到空树中,直接将红色变为黑色即可满足性质2

情况二

如果新节点的父节点为P为黑色,性质四与性质5符合 所以不需要改变

情况三

P为红色U也是红色G为黑色

步骤 将P和U变换为黑色,并将G变为红色

如果N的祖父节点G的父节点也可能是红色的,可以递归来处理颜色,如果递归调整颜色到了根节点,那就需要旋转了

情况四

P是红色,U为黑色,祖父节点G为黑色,N并且作为左孩子

对祖父节点G进行右旋转,并将P节点变为黑色,G节点变为红色。

情况五

P为红色,U和G 为黑色,并且N为右孩子

以P为根先进行左旋转,将P作为新插入的红色节点进行考虑,N变为黑色,祖父节点G变为红色,在一祖父节点G为中心进行右旋转。