树的定义
引入
在现实中,不论是人类社会还是大自然,都有这样一类关系,即层次关系。
比如,大树与树枝、叶子, 家族中的祖孙三代,组织中的领导和下属,操作系统中的文件和文件夹,数据库中的表和表字段,编程语言中的变量和函数,等等。
这类关系一般还包含一对多的关系,即一个对象可以有多个子对象。
备注
一对多的层次关系跟大树与枝叶的关系非常相似,于是在计算机科学中,为了表示/抽象这类关系,就定义了树的结构。
一、什么是树
树是计算机科学中非常常见的一种数据结构。它们按节点层次结构进行组织。存储在树中的任何内容都用一个节点表示,该节点可以包含自己的数据以及对其子项(子节点)的引用。 树的定义有如下两个限定条件:
- 树的所有节点都必须通过父子关系的路径以某种方式连接。
- 树中的两个节点之间可以有且只能有一条路径。
由以上两个条件,我们可以得出树的两个特性:
- 树中只能有一个根节点。
- 树中不能有任何循环,即子孙节点不相交
- 子节点本身就是一棵树。
上图中的 A 是一个包含元素的集合,通常称为节点(node)。它可以存储任何数据项,无论是名称、地点、数字等,还是任何类型的。
树(Tree)是由 N (N >= 0) 个结点构成的有限集合。
当 N = 0 时,树为空树 当 N = 1 时,树只有一个根结点 当 N > 1 时,树除了一个根结点外,其余结点又可分为若干个不相交的有限集合,我们称之为子树。
非空树有且仅有一个根结点。
树的层级
很自然的我们就想到了树是一层一层的,就像一个祖父是根,父母、姑、舅、姨是一辈,你、兄、弟、姐、妹是第三辈,所以树也有层级,即定义了树的深度。