一、树的定义
递归定义:
一个树(或树形)是一个有限非空的节点集合T,其中:
有一个特别标出的被称为该树(或树形)之根(root)的节点;
其余节点(根除外)被分成m≥0个不相交的集合T1, T2, …, Tm,且T1, T2, …, Tm又都是树(或树形)。这些树(或树形)T1, T2, …, Tm被称作root(T)的子树(或子树形)。
非递归定义:
树是包含n(n≥1)个节点且满足如下条件的有限集合:
存在一个唯一的节点v0,它没有前驱节点,称为树的根(或根节点);
其余节点(除了根节点)都有且仅有一个前驱节点;
任何节点都可能有多个(≤n-1)后继节点,称之为该节点的子节点;若某节点没有后继节点,则称之为叶节点;
任一非根节点vk都有且仅有一条从v0到该节点的节点序列(或曰路径)v0-v1-…-vk。
二、树的基本要素
1、节点(Node):
树的基本单位,包含一个数据元素及若干指向其子节点的分支。
节点分类:
1、根节点(Root):树的顶端节点,没有父节点。
2、叶节点(Leaf):没有子节点的节点。
3、内部节点(Internal Node):至少有一个子节点的节点。
4、子节点(Child)和父节点(Parent):节点的直接下属节点称为子节点,直接上属节点称为父节点。
5、兄弟节点(Sibling):具有相同父节点的节点互为兄弟。
2、边(Edge):
连接两个节点的线,表示节点之间的父子关系。
3、路径(Path):
从一个节点到另一个节点经过的节点序列。
4、树的度(Degree):
树中节点的最大度数,即树中任意节点的最大子节点数。
5、节点的度(Degree of a Node):
节点的子树个数。
6、层次(Level):
节点所在的层次,从根开始定义,根为第1层,根的子节点为第2层,依次类推。
7、树的深度(Depth)或高度(Height):
树中节点的最大层次。
三、树的性质
1、非空树中,n个节点共有n-1条边。
2、度为m的树中,第i层最多有m^(i-1)个节点(i≥1)。
3、深度为h的m叉树最多有(m^h - 1)/(m - 1)个节点(m > 1)。
4、具有n个节点的完全二叉树的深度为⌊log₂n⌋ + 1。
5、n个节点的树至少有⌈log₂(n + 1)⌉层。
四、树的类型
1、二叉树(Binary Tree):
每个节点最多有两个子树的树结构。
特殊类型包括:完全二叉树、满二叉树、平衡二叉树(如AVL树、红黑树)、二叉搜索树等。
2、多叉树(Multiway Tree):
每个节点可以有多个子节点的树结构。
3、森林(Forest):
多棵互不相交的树的集合。
五、树的应用
1、文件系统:
计算机的文件系统通常以树的形式组织文件和目录。
2、数据库索引:
数据库系统使用树结构(如B树、B+树)来加速数据检索操作。
3、XML和JSON解析:
树结构常用于解析和表示XML和JSON数据。
4、编程语言的抽象语法树(AST):
在编程语言编译器和解释器中,AST用于表示源代码的语法结构。
5、家谱和组织结构:
家谱通常以树的形式表示,组织结构中的层次性管理也可以用树结构表示。
6、网络路由:
路由表通常使用树结构来确定数据包的传输路径。