数据结构——红黑树(hashmap底层实现)(更新中)

学无止境 Java工程师的进阶之旅

树基础及红黑树

  • 树前置基础知识
    • 1、什么是树
    • 2、常用术语
    • 3、二叉搜索树
    • 3、时间复杂度
  • 红黑树
    • 1、原理讲解

树前置基础知识

1、什么是树

是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合,他是由n个有限节点通过连接它们的组成的一个具有层次关系的集合
每个节点最多只能有两个子节点的称为二叉树
数据结构——红黑树(hashmap底层实现)(更新中)_第1张图片

2、常用术语

数据结构——红黑树(hashmap底层实现)(更新中)_第2张图片

3、二叉搜索树

1、定义
要求:
1、若左子树不空,则左子树的所有节点均小于根节点
2、若右子树不空,则左子树的所有节点均大于根节点
3、它的左右子树分别为二叉排序树
数据结构——红黑树(hashmap底层实现)(更新中)_第3张图片

2、操作
1、查找节点
数据结构——红黑树(hashmap底层实现)(更新中)_第4张图片
2、插入节点
在这里插入图片描述
3、遍历节点
遍历树是根据一种特定的顺序访问树的每一个节点。二叉搜索树采用中序遍历
在这里插入图片描述
4、查找最大值和最小值
最小值:一直找左节点
最大值:一直找右节点
数据结构——红黑树(hashmap底层实现)(更新中)_第5张图片
5、删除节点

  1. 该节点是叶节点(没有子节点)
  2. 该节点有一个子节点
  3. 该节点有两个子节点

5.1、删除没有子节点的节点
要删除叶节点,只需要改变该节点的父节点引用该节点的值,即将引用改为null即可
数据结构——红黑树(hashmap底层实现)(更新中)_第6张图片
5.2、删除有一个子节点的节点
只需要将父节点原本指向该节点的引用,改为指向该节点的子节点即可
数据结构——红黑树(hashmap底层实现)(更新中)_第7张图片
5.3、删除有两个子节点的节点
用后继节点代替删除的节点
后继节点:大于该节点的最小节点
数据结构——红黑树(hashmap底层实现)(更新中)_第8张图片
5.4、逻辑删除
通过上面的分类讨论,我们发现删除挺复杂,其实可以给每个节点标识字段isDelete,当该字段为true时,标识该节点已删除,这样删除节点就不会改变树的结构

3、时间复杂度

1、回顾二分查找算法
[1,2,3,4,5,6,7,8,9。。。。。100]
数据源必须是有序数组,每次迭代查询可以排除一半的结果

public static int binarySearch(int[] arr, int data) {
    int low = 0;
    int height = arr.length - 1;

    while (low <= height) {
        int mid = (low + height) / 2;

        if (arr[mid] < data) {
            low = mid + 1;
        } else if (arr[mid] == data) {
            return mid;
        } else {
            height = mid - 1;
        }
    }
    return -1;
}

2、二分查找算法缺陷
必须依赖有序数组才有高性能

3、数组缺陷
没有办法快速插入,没有办法扩容

4、二分查找算法怎么样才能有高性能又有链表的高灵活性
二叉搜索树!!

5、二分查找算法时间复杂度
数据结构——红黑树(hashmap底层实现)(更新中)_第9张图片
6、普通二叉搜索树的致命缺陷
数据结构——红黑树(hashmap底层实现)(更新中)_第10张图片
6、解决二叉搜索树退化成线性链表的问题
如果插入元素时,树可以自动保持平衡,会保持不错的查找性能

AVL树:
1、具有二叉查找树的所有特性
2、每个节点的左子树和右子树的高度差至多等于1
平衡树基于这种特点就可以保证不会出现大量节点偏向一边的情况(插入或者删除时,会发生左旋,右旋操作,使这棵树保持一定的平衡)
数据结构——红黑树(hashmap底层实现)(更新中)_第11张图片
数据结构——红黑树(hashmap底层实现)(更新中)_第12张图片

红黑树

1、原理讲解

红黑树并不是一个完美平衡二叉树,但左右子树的黑节点层数是相等的,也即任意一个节点到每个叶子节点的路径都包含数量相同的黑节点。所以我们叫红黑树这种平衡为黑色完美平衡
数据结构——红黑树(hashmap底层实现)(更新中)_第13张图片
在这里插入图片描述
左旋图示
数据结构——红黑树(hashmap底层实现)(更新中)_第14张图片
右旋图示
数据结构——红黑树(hashmap底层实现)(更新中)_第15张图片

你可能感兴趣的:(数据结构与算法,数据结构)