树结构
一种非线性结构,用来描述元素间层次关系,即一个结点的直接前驱若存在必唯一,直接后驱若存在,可有多个,也就是一对多的关系。
树
是一种非线性的数据结构,由结点和边组成。其特点是:
- 层级结构:结点之间存在父子关系,形成层次。
- 唯一根节点:树有且仅有一个根结点,无父结点。
- 无环连通图:树是连通且无环的图,任意两结点间有且仅有一条路径。
- 子树递归:每个结点的子结点构成子树,子树本身也是树。
连通图:是指无向图中任意两个顶点之间都存在路径的图。即从图中的任何一个顶点出发,都可以通过边到达其他任意顶点。(性质:1、图中任意两个顶点之间至少存在一条路径。2、图不存在孤立的部分。)
对于有向图,若任意两个顶点之间双向可达(即存在从u到v和从v到u的路径),则称为强连通图;若忽略边的方向后形成的无向图是连通的,则称为弱连通图。
树的相关概念
结点相关术语
- 根结点:有且仅有一个特定的称为根结点。
- 内部结点:至少有一个子结点的结点。
- 叶子结点:无子结点的结点。
- 父结点:当前结点的直接前驱。
- 子结点:当前结点的所有直接后继。
- 兄弟结点:拥有同一父结点的结点。
树的结构术语
- 度:结点的子结点数量。树的度为所有结点度中的最大值。
- 层次:根结点为第1层,其余结点层次为其父结点层次+1。
- 高度/深度:树中结点的最大层次,即树共有多少层。
- 路径:一个结点去到另一个结点所经过的结点序列。
二叉树
每个结点最多(也可以仅有一个结点或者没有结点)有两个子节点,分别称为左子结点和右子结点。其特定是:
- 二叉树可以为空,即不含任何结点的空集为空二叉树。
- 每个结点最多有两个孩子,分别称为该结点的左孩子和右孩子。即所有结点的度都小于或等于2。
- 二叉树子树有左,右之分,次序不能颠倒,是有序树(一棵树的各结点的子树从左到右依次有序,不能交换)。
常见形态
- 满二叉树:任意一层的结点数都达到最大值。
- 完全二叉树:满二叉树的基础上,可从最底层开始,依次去掉部分叶子结点。
完全二叉树特征
- 叶结点只可能出现在最底下两层。
- 任意一个结点的左分支下的最大层次为 l ,则其右分支下的最大层次为 l 或 l-1(结点想去掉必须从该层最右侧依次往左去掉)。
- 满二叉树必为完全二叉树,但是反过来不一定。
常见性质
- 结点数=总度数+1(因为每个结点都有唯一的一个前驱,除根结点外。)
- 度为 m 的树的第 i 层至多有
(i>=1)个结点(假设有棵度为3的树,其必有某个结点有3个子结点,又要求达到最多的结点数,所以该树的所有结点都应该达到度为3。故该树第1层有
个结点,第2层有
个结点,第3层有
个结点......第k+1层的每个节点是第k层节点的子节点,而第k层最多有
个节点,每个节点最多有3个子节点。)
- m叉树第 i 层至多有
(i>=1)个结点。
- 高度为h的m叉树至多有
个结点(每一层至多有
结点,共h层,将每一层数量相加,为等比数列求和,即
。)
- 高度为h,度为m的树至少有h+m-1个结点(度为m的树有要求,即至少存在一个结点的度为m。)
- 高度为h的m叉树至少有h个结点(m叉树分支没有固定要求,所以,至少的情况是退化为链表,即每一层只有一个结点。)
- 具有n个结点的m叉树的最小高度为
(求最小高度,则要尽可能让每一层结点数最多,由上述4知道,如果如果n个结点的高度为h层,则n值应该大于h-1层的满m叉树结点数,同时小于或等于h层的满二叉树,即
<n<=
。)
对于二叉树,则把上述m叉树的m替换为2即可
二叉树的性质
- 一个非空二叉树的第 i 层上最多有
(i>=1)个结点。
- 深度为k的二叉树最多有
(k>=1)个结点(当深度为k且结点数为
个结点时,该二叉树为满二叉树)。
- 任何一棵二叉树中,叶结点个数为
,度为2的结点个数为
,有
。
- 具有n个结点的完全二叉树的深度为
。
- 对一棵有n个结点的完全二叉树按从上到下,从左到右对结点从1-i 进行编号,对任意一个结点 i (1<=i<=n):若有双亲,双亲编号为
;2i<=n时,i 的左孩子编号为2i;2i+1<=n时,i 的右孩子编号为2i+1 。