二叉查找树、平衡二叉树、红黑树学习笔记

owo

二叉查找树

  • 是一个二叉树
  • 对于每个节点,左子结点比自己小,右子节点比自己大

弊端:可能退化成链表,导致查询效率降低

平衡二叉树

  • 是一个二叉查找树

  • 对于每个节点,左子树和右子树高度相差不超过1

  • 插入节点之后可能会破坏平衡,需要通过旋转恢复平衡

  • 旋转规则详见网络

红黑树

  • 二叉查找B树
  • 不是高度平衡的
  • 红黑规则

红黑规则

  • 每一个节点是红色或黑色
  • 根节点黑色
  • 若一个节点无子节点或父节点,则这个节点属性值为Nil,视为叶节点,每个Nil叶节点是黑色的(根节点无父节点)
  • 红色节点的子节点必须是黑色
  • 对每个节点,从这个节点到所有后代叶子结点的简单路径上,包含相同数目的黑色节点

添加节点

  • 添加的节点默认红色(效率高)

添加的节点为根

  • 直接变为黑色

添加的节点非根

父为黑
  • 不需要操作
父为红
叔叔红
  • 父 -> 黑,叔 -> 黑
  • 祖父 -> 红
  • 若祖父为根,祖父 -> 黑
  • 若祖父非根,祖父 -> 当前节点
叔叔黑,当前节点是父节点右儿子
  • 将父节点作为当前节点并左旋,接着判断
叔叔黑,当前节点是父节点左儿子
  • 父 -> 黑
  • 祖父 -> 红
  • 以祖父为支点右旋

优点

增删改查性能很好

img_show