数据结构-树 以及Set集合
一、数据结构(树)
1.专业名词及介绍
(1)节点(以节点16为例)
父节点:此节点上方的节点(18)
左子节点:此节点左下方的节点 (15)
右子节点:此节点右下方的节点(17)
(2)度:每一个节点的子节点数量
(3)二叉树:任意节点的度(子节点的数量)<=2
(4)树的高度(树高):树的总层数
(5)根节点:最顶层的节点
(6)
根节点的左子树:蓝色虚线里面的 根节点的右子树:绿色虚线里面的
2.二叉树
(1)、普通二叉树:树的结构毫无规律(如下图)
3.二叉查找树
★二叉查找树,又称二叉排序树或者二叉搜索树
(1)特点:
★每一个节点最多有两个子节点
★任意节点左子树上的值都小于当前节点
★任意节点右子树上的值 都大于当前节点
(2)添加节点:
★规则:大的存右边,小的存左边,一样的不存
(3)查找数据:
★规则:拿着值与根节点比较,小于根节点往左边找,大于根节点往右边找,以此类推,直至数据被找到或者数据不存在
(4)二叉树遍历方式:
①前序遍历
从根节点开始,然后按照 当前节点==》左子节点==》右子节点 的顺序遍历
则上图遍历完得到的数据顺序 20-18-16-19-23-22-24
②中序遍历
从当前节点开始,然后按照 左子节点==》当前节点==》右子节点 的顺序遍历
则上图遍历完得到的数据顺序 16-18-19-20-22-23-24
③后序遍历
从当前节点开始,然后按照 左子节点==》右子节点 ==》当前节点 的顺序遍历
则上图遍历完得到的数据顺序 16-19-18-22-24-23-20
④层序遍历
从根节点开始,一层一层(每一层从左至右)的遍历
则上图遍历完得到的数据顺序 20-18-23-16-19-22-24
4.平衡二叉树
(1)规则:任意节点左右子树高度差不超过1
(2)旋转机制:
①确定支点:从添加的节点开始,不断地往父节点找不平衡的点
②触发时机:当前加一个节点之后,该树不再是一颗平衡二叉树
(3)旋转分类
①左旋:
🔺以不平衡的点为支点
🔺把支点左旋降级,变成左子节点
🔺晋升原来的右子节点
②右旋:
🔺以不平衡的点为支点
🔺把支点右旋降级,变成右子节点
🔺晋升原来的左子节点
(4)平衡二叉树需要旋转的四种情况:
①左左:
当根节点的左子树的左子树有节点插入,导致二叉树不平衡(也就是在根节点的左子树的左子树上添加节点,导致二叉树不平衡,只需要一次右旋,就可以使二叉树平衡)
②右右:
当根节点的右子树的右子树有节点插入,导致二叉树不平衡(也就是在根节点的右子树的右子树上添加节点,导致二叉树不平衡,只需要一次左旋,就可以使二叉树平衡)
③左右:
当根节点的左子树的右子树有节点插入,导致二叉树不平衡(也就是在根节点的左子树的右子树上添加节点,导致二叉树不平衡,要先进行一次局部左旋变成 左左,再进行一次整体右旋,就可以使得二叉树平衡)
④右左:
当根节点的右子树的右子树有节点插入,导致二叉树不平衡(也就是在根节点的右子树的左子树上添加节点,导致二叉树不平衡,要先进行一次局部右旋变成 右右,再进行一次整体左旋,就可以使得二叉树平衡)
5.红黑树
★红黑树是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构
★1972年出现,当时被称为平衡二叉B树,后来1978年被修改为如今的“红黑树”
★它是一种特殊的二叉查找树,红黑树的每一个节点上都有存储位表示节点的颜色
★每一个节点可以是红或者黑;红黑树不是高度平衡的,它的平衡是通过“红黑规则实现的”
(1)红黑树与二叉查找树的区别
**平衡二叉树:**查找效率高
★高度平衡
★当左右子树高度差超过1时,通过旋转保持平衡
红黑树:增删改查效率都很高
★是一个二叉查找树
★但 不是高度平衡的
★条件:特有的红黑规则
(2)红黑树的红黑规则
①每一个节点或是红色的,或是黑色的
②根节点必须是黑色的
③如果一个节点没有子节点或者没有父节点,则该节点相应的指针属性值为nil,这些Nil视为叶节点,每个叶节点Nil是黑色的
④如果某一个节点是红色的,那么它的子节点必须是黑色的(不能出现两个红色节点相连的情况)
⑤对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点
(3)红黑树添加节点的规则
★默认颜色:添加节点默认是红色的(效率高)