一、树的定义
定义:树是n(n>0)个有限数据的集合。当n=0时称为空树。当n>0时,是非空树,满足一下两个条件:
(1)仅有一个称为根的结点
(2)其余结点分为m(m>=0)个互不相交的非空集合T1,T2...Tm,;其中每个集合本身又是一棵树,称为根的子树。
树的表示方法:
(1)树形表示法
(2)嵌套集合表示伐
(3)凹入表表示法
(4)广义表表示法
树的基本术语:
(1)结点:包含一个数据元素及若干指向其子树的分支。
(2)结点的度:结点所拥有的分支数目或后继结点个数称为该结点的度。
(3)树的度:树中各结点度的最大值称为该树的度。
(4)叶子(终端结点):度为零的结点称为叶子结点。
(5)分支结点(非终端结点):度不为零的结点称为分支结点。
(6)孩子结点:一个结点的后继称为该结点的孩子结点。
(7)结点的层次:树的根节点层次为1,其余结点的层次等于它双亲结点的层次加1.
(8)树的深度:树中结点的最大层次称为树的深度。
(9)有序树和无序树:如果一棵树中的结点的各子树从左到右是次序的,即若交换了某结点的各子树的相对位置,则构成了不同的树,这样的树叫有序树;反之,无序树。
(10)森林:m(m>=0)棵互不相交树的集合称为森林。
......
二、二叉树
二叉树的定义:有n(n>=0)个结点的有限集合
(1)该集合或者为空(n=0)
(2)或者由一个根节点及两个不相交的分别称为左子树和右子树组成的非空树
(3)左子树和右子树同样又都是二叉树
![](https://img-blog.csdnimg.cn/img_convert/63a6852f5207a132440a8aeddb38a2f7.png)
二叉树的存储结构:
(1)顺序存储结构:先对该二叉树中的各结点进行编号,然后以各结点的编号为下标,把各结点的值存到一维数组中。
缺点:造成空间的大量浪费
(2)链式存储结构:对于一般的二叉树,通常采用二叉链表表示。链表中的每个结点包含两个指针,分别指向该结点的左孩子和右孩子。
优点:便于查找左、右子树的结点,又便于查找双亲结点。
缺点:增加存储空间开销。
二叉树的遍历是指按某种顺序访问二叉树中的所有结点,使得每个结点都被访问,且仅被访问一次。通过一次遍历,使二叉树中结点的非线性序列转变为线性序列。
并查集
1. 并查集是一种树型的数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。
2. 并查集通常包含两种操作
查找(Find):查询两个元素是否在同一个集合中
合并(Union):把两个不相交的集合合并为一个集合