Java 数据结构—树(二叉查找树/平衡二叉树/红黑树)
简介:树是一种数据结构,二叉树是指最多有两颗子树的树。
一、二叉查找树(BST)
1. 定义:BST全称是Binary Search Tree,又称二叉搜索树,亦称二叉排序树,在一般情况下,查询效率比链表结构要高;
2. 性质
A. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
B. 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
C. 任意节点的左、右子树也分别为二叉查找树;
D. 所有节点存储一个关键字,且没有键值相等的节点。
3. 遍历方式
A. 前序遍历:先访问根结点,再遍历左子树,最后遍历右子树;
B. 中序遍历:先遍历左子树,再访问根结点,最后遍历右子树,该遍历的结果是顺序(有序)的;
C. 后序遍历:先遍历左子树,再遍历右子树,最后访问根结点。
二、平衡二叉树(AVL)
1. 定义:平衡二叉树(Balanced Binary Tree),具有如下特点
A. 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1;
B. 左右两个子树都是一棵平衡二叉树。
2. 旋转方式
A. LL(左左)的旋转
B. RR(右右)的旋转
C. LR(左右)的旋转
D. RL(右左)的旋转
三、红黑树(RBT)
1. 定义:红黑树(Red Black Tree)是一个自平衡二叉搜索树,除了满足二叉搜索树的特点外,还具有如下特点
A. 每个节点颜色不是黑色,就是红色;
B. 根节点是黑色的;
C. 如果一个节点是红色,那么它的两个子节点就是黑色的(没有连续的红节点);
D. 对于每个节点,从该节点到其后代叶节点的简单路径上,均包含相同数目的黑色节点;
E. 每个为空的(NIL或null)叶子节点都是黑色的。
注意:红黑树的由来是因为二叉查找树可能退化成链表,导致时间复杂度变为O(n),而平衡二叉树维护平衡的代价开销过大。
2. 红黑树的自我修正方式
A. 改变节点颜色;
B. 左旋:待旋转的节点从右边上升到父节点就是左旋;
C. 右旋:待旋转的节点从左边上升到父节点就是右旋;
3. 应用场景
A. Java中ConcurrentHashMap和TreeMap底层实现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗