-
某节点的左子树节点仅包含小于该节点的值
-
某节点的右子树节点仅包含大于该节点的值
-
节点必须是二叉树
-
顺序排列
存在问题:树可以认为是介于数组和链表二者之间的一种数据结构,拥有较快的查询速度同时拥有较快的插入和删除速度。但是在树出现极端或严重的不平衡情况下会导致效率低下
基于红黑树折中解决二叉树不平衡带来的效率低下问题
1.3.1 红黑树
-
红黑树,Red-Black Tree [RBT]是一个自平衡(不是绝对平衡)的二叉查找树(BST),树上的每个节点需要遵循下面的规则
-
每个节点要么是黑色,要么是红色
-
根节点为黑色
-
每个叶子节点(NIL)是黑色
-
不能存在两个连续的红色节点(红色节点的两个子节点必须是黑色)
-
任一节点到叶子节点的路径包含相同数量的黑节点
红黑树通过什么自平衡
- 左旋:以某个节点作为支点(旋转节点),其右子节点变为旋转节点的父节点,右子节点的左节点变为旋转节点的右子节点,左子节点保持不变
- 右旋:以某个节点作为支点(旋转节点),其左子节点变为旋转节点的父节点,左子节点的右子节点变为旋转节点的左子节点,右子节点保持不变
- 变色:节点的颜色由红色变为黑色或者黑色变为红色
红黑树插入场景
1、红黑树为空
1.1 插入节点作为根节点并把节点设置为黑色
2、插入节点的父节点为黑节点\
2.1 直接插入
3、插入节点的父节点为红节点
3.1 叔叔节点存在且为红节点
1、P节点和S节点设置为黑色
2、PP节点设置为红色
3、PP设置为当前插入节点
4、再次重复上述步骤
3.2 叔叔节点不存在或者叔叔节点为黑色
3.2.1 P节点是PP节点的左节点
3.2.1.1 插入节点是P节点的左节点
1、P设置为黑色
2、PP节点设置为红色
3、PP节点右旋
3.2.1.2 插入节点是P节点的右节点
1、P节点左旋
2、把P设置为插入节点(此时等于上面的场景)
3、PP节点右旋
2021年Java中高级面试必备知识点总结
在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。
本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。
目录:
(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)
部分内容:
对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。
不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注
img-GdGj2pRE-1714395355126)]
对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。
不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注