网站首页 > 技术教程 正文
什么是树
树是一种数据结构,有一个根节点
每个节点包含n(n>=0)个子节点
没有子节点的节点称为叶子节点
二叉树
二叉树是每个节点最多有两个子树的树结构
通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)
二叉树常被用于实现二叉查找树和二叉堆
二叉树的节点放置规则是:任何节点的键值一定大于其左子树中的每一个节点的键值,并小于其右子树中每一个节点的键值。因此,从根节点一直往左走,直至无左路可走,即得最小元素;从根节点一直往右走,直至无右路可走,即得最大元素。
平衡树
平衡树,即平衡二叉树(Balanced Binary Tree)
它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树
平衡二叉树的常用算法有红黑树、AVL、Treap、伸展树、SBT等
平衡树在每次插入或删除的时候通过左旋/右旋来不断调整根节点以达到平衡
1. 二叉左旋
一棵二叉平衡树的子树,根是Root,左子树是x,右子树的根为RootR,右子树的两个孩子树分别为RLeftChild和RRightChild。则左旋后,该子树的根为RootR,右子树为RRightChild,左子树的根为Root,Root的两个孩子树分别为x(左)和RLeftChild(右)。
2. 二叉右旋
一棵二叉平衡树的子树,根是Root,右子树是x,左子树的根为RootL,左子树的两个孩子树分别为LLeftChild和LRightChild。则右旋后,该子树的根为RootL,左子树为LLeftChild,右子树的根为Root,Root的两个孩子树分别为LRightChild(左)和x(右)。
红黑树
红黑树是一个平衡的二叉树,但不是一个完美的平衡二叉树
红黑树需要同时满足以下5个特性:
- 每个节点或者是黑色,或者是红色。
- 根节点是黑色。
- 每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
- 如果一个节点是红色的,则它的子节点必须是黑色的。
- 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
红黑树有什么用
红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高
转换成红黑树的目的就是为了提高查询效率
例如,Java集合中的TreeSet和TreeMap,以及jdk1.8的hashMap链表转红黑树
添加节点
红黑树也是二叉树,放置规则必须满足二叉树的规则
然后插入之后必须通过左旋/右旋/调色操作,以满足红黑树的5个特性
操作步骤
- 将插入节点标记为红色
- 逐步检查每个特性,如果不满足就通过左旋/右旋,以及调色操作进行调整
后续有空会增加示例代码,先简单描述一下,这5个条件的判断操作其实还挺麻烦的
删除节点
删除操作和添加类似
参考资料
- https://www.cnblogs.com/skywang12345/p/3245399.html
猜你喜欢
- 2024-10-20 红黑树和AVL树之间的区别(红黑树和b树区别)
- 2024-10-20 数据结构怎么讲都听不会!红黑树自平衡?左旋或右旋?一头雾水
- 2024-10-20 数据结构与算法-基础(十三)红黑树(1)概述
- 2024-10-20 红黑树(R-B tree)原理图文详解(红黑树构造)
- 2024-10-20 数据结构:有了二叉查找树、平衡树为啥还需要红黑树?
- 2024-10-20 问:红黑树的删除真的很难吗?其实是你没找到好的解题思路
- 2024-10-20 linux学习第21节,为什么要设计“红黑树”这么奇怪的二叉搜索树
- 2024-10-20 硬核图解红黑树并手写实现(红黑树讲解)
- 2024-10-20 面试官-谈谈红黑树(红黑树面试最简洁的回答方式)
- 2024-10-20 17张图带你解析红黑树的原理!保证你能看懂!轻松应对面试
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)