栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

红黑树深入学习

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

红黑树深入学习

一、介绍

红黑树是一种特殊的二叉查找树(特殊在自平衡上),每个节点会存储本节点的颜色,根节点和叶子节点(NIL或NULL,叶子结点不存储数据)是黑色。从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点(确保没有一条路径 会比其他路径长出两倍)。

应用场景:主要用来存储有序的数据,时间复杂度为O(lgn)。Java集合中的TreeSet和TreeMap,C++STL中的set、map以及Linux虚拟内存的管理都是通过红黑树实现

对于频繁插入、删除的场景,红黑树优势明显

二、自平衡实现

左旋:以某个结点为支点(旋转结点),其右子节点变为旋转结点的父结点,右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变

右旋:以某个结点为支点(旋转结点),其左子结点变为旋转结点的父结点,左子节点的右节点变为旋转结点的左子结点

变色:结点的颜色由红变黑或者由黑变红

三、红黑树查找
  • 从根结点开始查找,把根结点设置为当前结点;
  • 若当前结点为空,返回null;
  • 若当前结点不为空,用当前结点的key跟查找key作比较;
  • 若当前结点key等于查找key,那么该key就是查找目标,返回当前结点;
  • 若当前结点key大于查找key,把当前结点的左子结点设置为当前结点,重复步骤2;
  • 若当前结点key小于查找key,把当前结点的右子结点设置为当前结点,重复步骤2;
四、红黑树插入

步骤:①查找插入的位置②插入后自平衡

  • 从根结点开始查找;
  • 若根结点为空,那么插入结点作为根结点,结束。
  • 若根结点不为空,那么把根结点作为当前结点;
  • 若当前结点为null,返回当前结点的父结点,结束。
  • 若当前结点key等于查找key,那么该key所在结点就是插入结点,更新结点的值,结束。
  • 若当前结点key大于查找key,把当前结点的左子结点设置为当前结点,重复步骤4;
  • 若当前结点key小于查找key,把当前结点的右子结点设置为当前结点,重复步骤4;

注意:插入结点的颜色为红色,因为这样不会破坏红黑树的黑色平衡

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/940596.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号