java-数据结构—树

目录

树的组成

节点

根节点

其他组成部分

二叉树

普通二叉树

二叉查找树

二叉树的遍历

前序遍历

中序遍历

后序遍历

层序遍历

总结

平衡二叉树

平衡二叉树的旋转机制

左旋

右旋

需要旋转的四种情况

左左

左右

右右

右左

总结

红黑树


树的组成

节点

先引入树的组成:节点

节点又分为父节点,左子节点和右子节点

节点的组成是什么呢

度:是每一个节点的子节点的数量

所以在二叉树中,任意节点的度<=2

根节点

最顶层的节点

其他组成部分

二叉树

普通二叉树

满足度小于等于2的普通的树

二叉查找树

特点:度小于等于2

左子节点小于当前节点

右子节点小于当前节点

二叉树的遍历

我也不知道如何介绍,看图片以及结合文字思考一下,很容易就能明白

图片左侧是遍历后的结果,顺序是从左往右,从上往下

前序遍历

中序遍历

后序遍历

层序遍历

总结

平衡二叉树

规则:任意节点左右子树高度差不超过1

如下图,你不能只看根节点,你还得看其他的所有节点,看看所有节点的左右子树高度差是否超过一;

注意:没有左(右)节点时,我们认为该节点的左(右)节点的高度为0

举例:左侧二叉树的10节点,他没有左节点,所以左节点高度为0,右节点高度为3,高度差为3,所以不是平衡二叉树

平衡二叉树的旋转机制

旋转分为左旋和右旋;

触发时机:当添加一个节点后,平衡二叉树不再平衡,就要进行相应的旋转

左旋

类型一:不平衡的节点不是根节点时

举个例子:

下图是一个平衡二叉树

在11节点处添加右节点12,此时二叉树不再平衡,如下图

然后我们要找到导致不平衡的节点

方法如下:也就是从我们添加的12节点处开始往上找,判断节点是否平衡,知道找到不平衡的节点为止,如下图我们找到了10

所以接下来我们要对其进行左旋

步骤如下图

类型二:不平衡的节点是根节点时

举例

加节点前

加节点后

找不平衡节点

最后发现是根节点7不平衡

进行左旋

步骤如下图

右旋

这个和左旋基本操作类似,所以我不多加详细介绍了,直接给图

类型一:不平衡的节点不是根节点时

右旋前

右旋后

类型二:不平衡的节点是根节点时

右旋前

右旋后

需要旋转的四种情况
左左

旋转前,添加节点分别是1和3

旋转后

左右

旋转前,添加节点为6

第一次局部左旋,变成左左的情况

第二次整体右旋

右右

旋转前,12为添加节点

一次左旋即可

右左

旋转前,8为添加节点

对根节点的右子树进行局部右旋,得到

此时变为了右右的情况了,再对他进行整体左旋

总结

红黑树

(有点复杂,不好讲述,自行看图片介绍)

是一个二叉查找树,高度不平衡,满足红黑规则

红黑规则

添加节点的规则

注意:这里的叔叔,个人认为是伯伯,比较是父亲的兄弟,也就是说,如果父是左(右)子节点,则叔就是右(左)子节点

其余的自己看,按照步骤走

相关推荐
眰恦37436 分钟前
数据结构--第六章图
数据结构·算法
sjsjs111 小时前
【数据结构-差分】力扣1589. 所有排列中的最大和
数据结构·算法·leetcode
独領风萧1 小时前
数据结构之二叉树(1)
数据结构
敲上瘾1 小时前
多态的使用和原理(c++详解)
开发语言·数据结构·c++·单片机·aigc·多态·模拟
Gabriel Drop Out2 小时前
11年计算机考研408-数据结构
数据结构
问道飞鱼2 小时前
每日学习一个数据结构-哈夫曼树Huffman Tree
数据结构·学习·霍夫曼树
西柚与蓝莓2 小时前
922. 按奇偶排序数组 II 双指针 力扣
数据结构·算法·leetcode
宇柔3 小时前
Day5:移除链表元素
数据结构·算法·链表
SpongeG6 小时前
数据结构第三周做题总结_链表
数据结构·算法·链表
小珑也要变强6 小时前
队列基础概念
c语言·开发语言·数据结构·物联网