树和二叉树
树的基本概念
树的定义
树是 n ( n ≥ 0 ) n(n \ge 0) n(n≥0) 个结点的有限集合, n = 0 n = 0 n=0 时称为空树。
任意一个非空树都应该满足:
- 有且仅有一个特定的结点,称为根;
- 当 n > 1 n > 1 n>1 时,其余结点可分为 m ( m ≥ 0 ) m(m\ge0) m(m≥0) 个互不相交的有限集合 T 1 , T 2 , . . . , T m T_{1}, T_{2}, ... , T_{m} T1,T2,...,Tm,这些子集合本身也是树,称为根结点的子树。
树的定义是具有递归特性的,是一种递归的数据结构。在作为一种逻辑结构的同时,树也是一种分层结构,并具有两个特点:
- 树的根结点没有前驱结点,除根结点之外的所有结点有且仅有一个前驱结点;
- 树中所有结点可以有零个或者无穷个后继结点。
树的基本术语
- 对于结点 G G G,根结点 A A A 到结点 G G G 的唯一路径上的任意结点,都称为结点 G G G 的祖先结点。其中,结点 B B B 是结点 G G G 的祖先结点,而结点 G G G 是结点 B B B 的子孙结点;路径上最接近结点 G G G 的结点 D D D 是 G G G 的双亲结点,而 G G G 是 D D D 的孩子结点;根结点 A A A 是树中唯一没有双亲的结点;具有相同双亲的结点称为兄弟结点,如结点 G G G 和 H H H 是兄弟结点。
- 树中一个结点的子结点个数称为该结点的度,树中结点的最大度数为树的度。
- 度大于 0 的结点称为分支结点(或非终端结点),度为 0 (没有孩子结点)的结点称为叶子结点(或终端结点)。在分支结点中,结点的分支数为该结点的度。
- 结点的层次:从树根开始定义,根结点为第一层,子结点以此类推。
- 结点的深度:从根结点开始自顶向下逐层累加得到。
- 结点的高度:从叶子结点开始自底向上逐层累加得到。
- 树的高度(或深度)是树中结点的最大层次数。
- 有序树和无序树:树中结点的子树从左到右存在次序,并且不能交换,这样的树称为有序树,在有序树中,一个结点的子结点按照从左到右的顺序出现存在关联性。反之子结点之间不存在次序则称为无序树。
- 路径和路径长度: 树中两个结点之间的路径是由着两个结点之间所经过的结点序列组成的,而路径长度是路径上经过的边的个数。
- **森林:**是 m ( m ≥ 0 ) m(m\ge0) m(m≥0) 个互不相交的树的集合。
树的基本特性
- 树中的结点数等于所有结点的度数加1;
- 度为 m m m 的树中第 i i i 层上至多有 m i − 1 ( i ≥ 0 ) m^{i-1}(i\ge0) mi−1(i≥0) 个结点;
- 高度为 h h h 的 m m m 叉树至多有 m h − 1 m − 1 \frac{m^{h}-1}{m-1} m−1mh−1 个结点;
- 具有 h h h 个结点的 m m m 叉树的最小高度为 ⌈ log m ( n ( m − 1 ) + 1 ) ⌉ \lceil \log_m(n(m-1)+1) \rceil ⌈logm(n(m−1)+1)⌉。
二叉树的概念
定义及特性
二叉树定义
二叉树的一种特殊的树形结构,其特点是每个结点至多只有两颗子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能交换颠倒(即二叉树是有序树)。
与一般的树相似,二叉树也有递归的形式定义,二叉树是 n ( n ≥ 0 ) n(n\ge0) n(n≥0) 个结点的有限集合,为空树时 n = 0 n=0 n=0 。由一个根结点和连个互不相交的根的左子树和右子树组成,其中左、右子树均是二叉树。
二叉树的五种基本形态:
二叉树与度为 2 的树的区别:
- 度为 2 的树至少有三个结点,而二叉树可以为空;
- 度为 2 的有序树的孩子结点的左右次序是相对于另一个孩子结点而言的,若某结点只有一个孩子结点,那么这个孩子结点就没有左右次序之分。而二叉树内无论有无孩子结点,孩子结点多少,均需确定其左右次序,即二叉树的结点次序不是对于另一个结点而言,是结点本身的属性。
特殊的二叉树
满二叉树
一棵高度为 h h h ,且含有 2 h − 1 2^{h}-1 2h−1 个结点的二叉树称为满二叉树,即树中的每层都含有最多的结点。满二叉树的叶子结点都集中在二叉树的最下一层,并且除叶子结点之外的每个结点的度数都为2。
对满二叉树按层序编号,约定从根结点开始编号,根结点编号为 1,自上而下,从左往右,每个结点对应一个编号。对于编号为 i i