红黑树

2-3树

定义:每个节点有两个或三个节点
分类:
  • 2-节点:一个节点有1个元素,且有两个孩子
    2-节点
  • 3-节点:一个节点有2个元素,且有三个孩子
    在这里插入图片描述
基本性质
  • 满足二分搜索树的基本性质
  • 一个节点可以存放一个或两个元素
  • 2-3树是一颗绝对平衡的树(左右子树的高度相等)
2-3树元素的添加
  • 添加元素的规则

    • 新添加的元素不会添加到空节点上,而是添加到最后搜索到的叶子结点,再与之融合在一起
    • 如果新加入的元素与2-节点融合,直接融合,形成3-节点
    • 如果新加入的元素与3-节点融合,先融合形成4-节点,再进行拆分成每个节点有两个孩子的三个节点。
    • 不能超过3-节点,即一个节点不能有超过三个孩子
  • 添加的元素依次为 42,37,12,18,6,11,5
    在这里插入图片描述

  • 总结:

    • 12为根节点不需要再向上与父节点融合,本次的添加操作结束
    • 每一步的操作都体现了2-3树的绝对平衡性
    • 一般流程:插入-融合-拆分
    红黑树与2-3树的等价性

    在这里插入图片描述

    红黑树的基本性质
    • 每个节点要么是红色要么是黑色
    • 根节点是黑色
    • 每一个叶子节点(最后的空节点)是黑色的
    • 如果一个节点为红色,其孩子为黑色
    • 从任意一个节点到叶子节点,经过的黑色节点的数量是一样的
    • 红黑树的红色节点对应就是2-3树中3-节点的左结点
    • 红黑树是“黑平衡”的二叉树,左右子树的黑色节点的高度差保持绝对的平衡。但不是平衡二叉树。最大高度h=2*log^n
    • 经过log^n级别的黑色节点,而经过的每一个黑色节点的左孩子为红色节点,即经过的黑色节点都是2-3树中的3-节点的右节点
    红黑树的性能
    • 失去了平衡性,但统计性能更优,添加节点(O(log^n))
      删除节点(O(log^n)),比AVL树拥有更好的性能,红黑树是保持自平衡的树结构。
    红黑树添加新元素
    • 情况一:将新元素添加到2-节点中,添加的新元素在父节点的右侧,需要对父节点进行左旋转,本质上等价于2-3树中将新元素放进2-节点形成3-节点对应在红黑树中的操作——左旋转:
      在这里插入图片描述
    //左旋转代码实现
    private Node leftRotate(Node node){
      Node x=node.right;
      node.right=x.lenft;;
      x.left=node;
      //颜色改变
      x.color = node.color;
      node.color = red;
      return x;		//返回根节点
    

}

  • 情况二:向2-3树中的3-节点添加新元素对应在红黑树中黑色节点(有一个红色的左结点)的右侧添加新元素,即添加的元素比3-节点中两个元素都要大——颜色翻转。
    在这里插入图片描述
//颜色翻转
private void flipColor(Node node){
  node.color = red;
  node.left.color = black;
  node.right.color = black;
}
  • 情况三:将新元素加入到2-3树中的3-节点中,将新元素添加到黑色节点左孩子的左孩子上,即添加的元素比3-节点中两个元素都要小——右旋转。
    在这里插入图片描述
//右旋转
private void rightRotate(Node node){
	Node x=node.left;
	node.left=x.right;
	x.right=node;
	//颜色维护
	x.color=node.color;
	node.color=red;
	return x;
}
  • 情况四:将新元素添加到黑色节点的左孩子的右孩子上,即a(左孩子)<b(新元素)<c(父节点)
    在这里插入图片描述
  • 总结:将新元素加入到红黑树对应2-3树中的3-节点。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值