目录
树的组成
节点
先引入树的组成:节点
节点又分为父节点,左子节点和右子节点
节点的组成是什么呢
度
度:是每一个节点的子节点的数量
所以在二叉树中,任意节点的度<=2
根节点
最顶层的节点
其他组成部分
二叉树
普通二叉树
满足度小于等于2的普通的树
二叉查找树
特点:度小于等于2
左子节点小于当前节点
右子节点小于当前节点
二叉树的遍历
我也不知道如何介绍,看图片以及结合文字思考一下,很容易就能明白
图片左侧是遍历后的结果,顺序是从左往右,从上往下
前序遍历
中序遍历
后序遍历
层序遍历
总结
平衡二叉树
规则:任意节点左右子树高度差不超过1
如下图,你不能只看根节点,你还得看其他的所有节点,看看所有节点的左右子树高度差是否超过一;
注意:没有左(右)节点时,我们认为该节点的左(右)节点的高度为0
举例:左侧二叉树的10节点,他没有左节点,所以左节点高度为0,右节点高度为3,高度差为3,所以不是平衡二叉树
平衡二叉树的旋转机制
旋转分为左旋和右旋;
触发时机:当添加一个节点后,平衡二叉树不再平衡,就要进行相应的旋转
左旋
类型一:不平衡的节点不是根节点时
举个例子:
下图是一个平衡二叉树
在11节点处添加右节点12,此时二叉树不再平衡,如下图
然后我们要找到导致不平衡的节点
方法如下:也就是从我们添加的12节点处开始往上找,判断节点是否平衡,知道找到不平衡的节点为止,如下图我们找到了10
所以接下来我们要对其进行左旋
步骤如下图
类型二:不平衡的节点是根节点时
举例
加节点前
加节点后
找不平衡节点
最后发现是根节点7不平衡
进行左旋
步骤如下图
右旋
这个和左旋基本操作类似,所以我不多加详细介绍了,直接给图
类型一:不平衡的节点不是根节点时
右旋前
右旋后
类型二:不平衡的节点是根节点时
右旋前
右旋后
需要旋转的四种情况
左左
旋转前,添加节点分别是1和3
旋转后
左右
旋转前,添加节点为6
第一次局部左旋,变成左左的情况
第二次整体右旋
右右
旋转前,12为添加节点
一次左旋即可
右左
旋转前,8为添加节点
对根节点的右子树进行局部右旋,得到
此时变为了右右的情况了,再对他进行整体左旋
总结
红黑树
(有点复杂,不好讲述,自行看图片介绍)
是一个二叉查找树,高度不平衡,满足红黑规则
红黑规则
添加节点的规则
注意:这里的叔叔,个人认为是伯伯,比较是父亲的兄弟,也就是说,如果父是左(右)子节点,则叔就是右(左)子节点
其余的自己看,按照步骤走