数据结构【树】

树的定义

树是一种非线性的数据结构,它是一个包含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、编译器中的语法分析
在编译器中,语法可以通过树结构来表示。语法树是指由语法规则构成的树形结构,它可以将程序的语法结构表示为一个树形结构,方便进行语法分析。

参考资料:数据结构与算法基础-王卓老师

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值