1 树
1.1 树的概念与结构
树是一种非线性的数据结构,它是由 n(n>=0)个有限结点组成一个具有层次关系的集合。 具有以下特点:
- 具有根节点,且根节点无前驱结点。
除根结点外,其余结点被分成 M(M>0) 个互不相交的集合,每一 个集合又是 一棵结构与树类似的子树。每棵子树的根结点仅有一个前驱结点,但可以有多个互不相交的后驱结点。(若存在相交就是图了)
1.2 相关术语
- 子结点/孩子结点:一个结点的子树的根结点称子结点;如上图:B 是 A 的子结点。
- 父结点/双亲结点:含有子结点的结点称为其子结点的父结点;如上图:A 是 B 的父结点。
- 结点的度:一个结点有几个子结点,度就是多少;如 A 的度为 3,F 的度为 0。
- 树的度:一棵树中,最大的结点的度称为树的度;如上图:树的度为 3。
- 叶子结点/终端结点:度为 0 的结点称为叶结点;如上图:J、K、L…等结点为叶结点。
- 分支结点/非终端结点:度不为 0 的结点;如上图:A、B、C、D…等结点为分支结点。
- 兄弟结点:具有相同父结点的结点互称为兄弟结点 (亲兄弟);如上图:E、F 是兄弟结点。
- 结点的层次:从根开始定义起,根为第 1 层,根的⼦结点为第 2 层,以此类推。
- 树的高度或深度:树中结点的最大层次;如上图:树的高度为 4。
- 结点的祖先:从根到该结点所经分支上的所有结点;如上图:A 是所有结点的祖先。
- 子孙:以某结点为根的子树中任⼀结点都称为该结点的子孙。如上图:所有结点都是 A 的子孙
- 路径:一条从树中任意节点出发,沿父节点 - 子节点连接,达到任意节点的序列;如 A 到 J 的路径为:A-B-E-J。
- 森林:由 m(m>0)棵互不相交的树的集合称为森林。
1.3 树的表示与运用场景
树的表示有很多种,最常用的便是孩子兄弟表示法,其很好地解决了结点和结点之间的关系。
struct TreeNode {
struct Node* child; // 左边开始的第一个孩子结点
struct Node* brother; // 指向其右边的下一个兄弟结点
int data; // 结点中的数据域
};
1.3.1 运用场景
文件系统是计算机存储和管理文件的一种方式,它利用树形结构来组织和管理文件和文件夹。在文件系统中,树结构被广泛应用,它通过父结点和⼦结点之间的关系来表示不同层级的文件和文件夹之间的关联。
2 二叉树
2.1 概念与结构
一棵二叉树是结点的一个有限集合,该集合由一个根结点加上两棵别称为左子树和右子树的二叉树组成或者为空。
特点:
- 不存在大于度大于 2 的结点;
- 二叉树有左右之分,次序不能颠倒。


