1.树
1.1.树的基本概念
树是一种非线性的数据结构,它由节点(或称作顶点)和连接这些节点的边组成。树中有一个特殊的节点被称为根节点,所有其他节点都以某种方式相对于根节点进行连接。树中除了根节点以外的每个节点只有一个父节点,但可以有多个子节点。树中没有环路,也就是说从根节点开始沿着任何路径移动都不会重复经过同一个节点。
1.1.1.树的形式化定义
树:T={D,R},D是包含n个节点的有穷集合,R代表关系。当n=0时为空树,否则R满足以下条件:
- 有且仅有一个节点d0
D,则此时R没有前驱节点,即d0为根节点
- 出节点d0外,D中每个节点对于R有且一个前驱节点
- D中每个节点对于R可以有零个或多个后继节点
1.1.2.递归定义
- 一个空树(或空的树节点)是一个树
- 一个由根节点和若干个子树(可能是空树)组成的集合是一个树。其中每个子树本身也是树
1.2.树的表示
- 树形表示法
- 文氏图表示法
- 凹入表示法
- 括号表示法
1.3.基本术语
1.3.1.节点的度与树的度
节点的度是指节点拥有的子树的个数,或者说是节点拥有的直接后继节点的个数。树的度是指树中节点的最大度数,也可以看作是树中各节点度数中的最大值。如果树的度为d,那么树中任意节点的度必须小于等于d。
如上图:
树的度为:3;
B节点的度为:2;
I节点的度为:3;
1.3.2.分支节点与叶子节点
分支节点(或内部节点):这些节点具有一个或多个子节点。也就是说,它们不是最终的结束点,而是代表树的一个分支。叶子节点:这些节点是树中没有子节点的节点,它们是树的最末端节点。叶子节点通常包含实际的数据,类似于树中的“叶子”。
分支节点和叶子节点之间的区别在于它们是否具有子节点。分支节点有子节点,而叶子节点没有子节点。这样的划分可以帮助我们更好地理解树结构,同时也对树的操作和算法有一定的影响。
1.3.3.路径与路径长度
在树的上下文中,路径是指树中两个节点之间的顺次连接。换句话说,路径由树中的节点组成,这些节点按顺序连接在一起,形成从一个节点到另一个节点的通路。路径长度是指路径上边的数量。如果路径连接了n个节点,那么路径的长度将为n-1。路径长度也可以根据具体上下文来表示,有时候可能是指路径上边的权重之和,取决于树所表示的具体含义。
1.3.4.孩子节点,双亲结点和兄弟节点
孩子节点 (Child Node) 指的是一个节点的直接后继节点,即与该节点相连的子节点。每个节点可以有零个或多个孩子节点。
双亲结点 (Parent Node) 指的是一个节点的直接前驱节点,即与该节点相连的父节点。
兄弟节点 (Sibling Node) 是指具有相同父节点的节点。也就是说,如果两个节点具有相同的父节点,那么它们是兄弟节点。
1.3.5.节点的层次与树的高度
节点的层次指的是节点在树中的深度,即从根节点到该节点的路径长度。根节点的层次通常定义为1,其子节点的层次为2,以此类推。
树的高度是指树中节点的最大层次。换句话说,它是从根节点到最远叶子节点的最长路径的长度。树的高度也可以视为树的深度。
1.3.6.有序树和无序树
-
有序树(Ordered Tree):在有序树中,树的子节点之间是有顺序的,即对于每个节点的子节点都有一个线性次序。这意味着对任意一个节点的子节点的顺序是明确定义的,不能互换。例如,家谱中通常会按照出生顺序来排列子女,这就形成了有序树的结构。
-
无序树(Unordered Tree):在无序树中,树的子节点之间是没有顺序的,也就是说子节点之间的相对次序是不固定的。在无序树中,节点之间的关系是相对自由的,没有严格的顺序性。在一个无序树中,可以任意交换节点的位置而不会改变树的结构。
1.3.7.森林
森林是由多棵树(或称为子树)组成的集合。在森林中,每一棵树都是独立的,它们之间没有相互连接的边。 换句话说,森林是由多个独立的树组成的集合,这些树可以是有序树或无序树。
1.4.树的性质
1.4.1.性质一,树中的节点数等于所有节点的度数加一
1.4.2.性质二,度为m的树中第i层上至多有m^(i-1)个节点,这里应有i>=1
我们用数学归纳法证明: