红黑树,平衡二叉树

1. 什么是红黑树?

红黑树是一种自平衡的二叉查找树:

  • 节点要么是黑色,要么是红色。
  • 根节点为黑色。
  • 叶子节点都是黑色的空节点。(叶子节点不存储数据)
  • 红色节点的左右孩子都是黑色。保证了从根节点到叶子节点不会出现连续两个红色节点。
  • 从任意节点到它每个叶子节点的所有路径,都包含相同数量的黑色节点。保证了没有一条路径会比其他路径长出两倍。
  • 时间复杂度为 logn ,含n个节点的红黑树高度最多为 2log(n+1) 。

红黑树的左右旋:
  左旋就是将这个旋转节点作为他右孩子的左孩子,原本他右孩子的左孩子作为这个旋转节点的右孩子 右旋就是将旋转节点作为他左孩子的右孩子,原本他左孩子的右孩子作为这个旋转节点的左孩子左旋右旋代码

红黑树的应用
  • HashMap(1.8)
  • TreeMap
  • IO多路复用 epoll 的实现采用红黑树组织管理的 sockfd,以支持快速的增删改查;

2. 平衡二叉树(AVL树)

  • 左右两子树高度差的绝对值不超过1,通过左右旋来维持平衡。
  • 左右子树也都是平衡二叉树。
  • 平衡二叉树一定是二叉搜索树,反之则不一定。
  • 适合用于插入与删除次数比较少,但查找多的情况。
  • 时间复杂度为 logn。

3. 红黑树与平衡二叉树的区别?

  • 平衡二叉树要求两子树高度差的绝对值不超过1,对平衡要求的比较苛刻,所以需要复杂的左右旋操作来不断的维持平衡;红黑树降低了对平衡的要求,从而提高了性能。
  • 如果搜索的次数远大于插入、删除的次数,可以选择AVL树;如果搜索、插入和删除的次数几乎差不多,可以选择红黑树。
  • 如果数据频繁的进行插入、删除操作,使用平衡二叉树的代价就有些高了。而只是做了近似平衡的红黑树,它的插入、删除操作的性能都比较稳定,对于工程应用来说,会面对各种异常的情况,所以会更倾向于性能稳定的红黑树。

猜你喜欢

转载自blog.csdn.net/weixin_43338519/article/details/103544332