数据结构与算法之树结构
- 树的定义
- 树的基本术语
- 树结构和线性结构的比较
- 树的应用
树的定义
树是一种非线性的数据结构,它是一个包含n(n>=1)个节点,(n-1)条边的有穷集合。树有多种表现形式,把它叫做“树”是因为它看起来像一个倒挂的树,也就是说它是根朝上,叶子朝下的。
树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。
在任意一棵非空树中:
a. 有且仅有一个特定的称为根(Root)的结点;
b. 当 n>1时,其余结点可分为 m(m>0)个互不相交的有限集 T1、T2、……、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)
一个树可以有多个子树:
树也有其他的表示方式:嵌套集合、广义表、凹入表示
树的基本术语
节点(node) 树结构中的每一个元素称为一个节点,如上图中的ABC…M。除了根结点外,每个子结点可以分为多个不相交的子树。
根节点(root) 没有父节点的节点叫做根节点,如上图中的A。
父节点(parent) 一个节点的上级节点叫做它的父节点,一个节点最多只能有一个父节点,如上图中C是G的父节点。
子节点(child) 一个节点的下级节点叫做它的子节点,一个节点的子节点可以有多个,每一个非根结点有且只有一个父结点,如上图中的IJK是E的子节点。
兄弟节点(siblings) 拥有相同父节点的节点叫做兄弟节点,如上图中的L和K是兄弟节点。
叶子节点(leaf) 没有子节点的节点叫做叶子节点,如图中的IJKLM。
边(dege) 父子节点间的连接称为边,一棵树的边数为(n-1)。
节点的权(weight) 节点上的元素值。
路径(path) 从root节点找到该节点的路线,如上图中L的路径为A-D-H-L。路径的长为该路径上边的条数,L路径的长为3(n-1)。
层(layer) 距离根节点相等的路径长度为一层,如上图中A为第一层;BCD为第二层;EFGHIJ为第三层;KLM为第四层。
子树(child tree) 以某一节点(非root)做为根的树称为子树,如以E为根的树称为A的子树。
树的高度(height) 树的最大层数,上图中树的高度为4。
节点的深度(height) 当前节点的到根节点的节点数量。
森林(words) 多棵子树构成树林。
需要注意的是,高度和深度是不同的概念。树的高度是根节点到最深叶子节点的路径长度,而深度是某个节点到根节点的节点数量。因此,在一棵树中,高度和深度的值是不相等的。根节点的深度为0。
树结构和线性结构的比较
树的应用
1、树可以应用在操作系统中的进程管理。
在操作系统中,进程可以通过树结构来管理。每个进程都有一个父进程,如果这个进程还有子进程,那么这些子进程就是这个进程的子节点。
2、文件系统中的目录结构
在文件系统中,目录可以通过树结构来组织。每个目录都有一个父目录,如果这个目录还有子目录,那么这些子目录就是这个目录的子节点。
3、编译器中的语法分析
在编译器中,语法可以通过树结构来表示。语法树是指由语法规则构成的树形结构,它可以将程序的语法结构表示为一个树形结构,方便进行语法分析。
参考资料:数据结构与算法基础-王卓老师