树与二叉树
1.1树的基本概念
树是指由N(N>=0)个有限结点组成的具有层次关系的集合,是一种简单的非线性结构。当N=0时,称为空树。
树作为一种逻辑结构,同时也是一种分层结构,具有以下两个特点:
(1)树的根结点没有前驱结点,除根结点以外的所有结点有且只有一个前驱结点。
(2)数中可以有零个或多个后继结点。
- 根结点:在树结构中,只有一个结点没有前件,称该结点为根结点(简称根),如图中的A结点。
- 父结点:在树结构中,每个结点只有一个前件,这个前件就是该结点的父结点,如图中E的父结点是B。
- 子结点:在树的结构中,每个结点可以有多个后件,这些后件就是该结点的子节点,如图中E的子节点是J和K。
- 叶子结点:在树结构中,没有后件的结点称为叶子结点,如图中的J、K、F、C、G、H、L、M。
- 度:树中一个结点的子节点个数称为该结点的度,树中结点的最大度数称为树的度,如下图中树的度为3。
- 树的深度:在树结构中,根结点所在的层次为1,其他结点所在的层次为其父结点所在的层次加1,最大的层次称为树的深度,如下图树的深度为4。
- 子树:在树结构中,以某一个结点的一个子结点为根结点构成的树,称为该结点的子树。
1.2树的性质
- 总分支数=1×N1+2×N2+…+m×Nm(其中Nm表示度为m的结点引出的m条分支)
- 总的结点数=N0+N1+N2+…+Nm
- 树中的结点数等于所有结点度数加1(含义:子结点加上根结点)
- 度为m的树中第i层上至多有mi-1个结点(i>=1)
2.1二叉树的基本概念
二叉树是另一种树形结构,其特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点)。并且,二叉树的子树有左右之分,其次序不能颠倒。
二叉树n(n>=0)个结点的有限集合
- ①当n=0时,为空二叉树
- ②当n>=1时,二叉树由一个根结点和两个互不相交的被称为左子树和右子树组成,左子树和右子树又分别是一颗二叉树。
这里有两种特殊的二叉树:
满二叉树:一颗高度为h,含有2h-1个结点的二叉树称为满二叉树,即树中的每一层都含有最多的结点。满二叉树的叶子结点都集中在二叉树的最下一层,除叶子结点以外每个结点的度数都为2.
完全二叉树:深度为K,有n个结点的二叉树当且仅当其每一个结点都与深度为K的满二叉树一一对应,称为完全二叉树。
2.2二叉树的性质
二叉树的性质主要包含一下几点:
- ①非空二叉树上的叶子结点数等于度为2的结点数加1。(即N0=N2+1)
- ②非空二叉树上第K层至多有2K-1个结点(K>=1)
- ③高度为H的二叉树至多有2H-1个结点(H>=1)
- ④具有N(N>0)个结点的完全二叉树的高度为log2(N+1)的向上取整或者log2N + 1的向下取整
2.3二叉树的结构
二叉树的存储结构分为顺序存储和链式存储
(1)顺序存储:二叉树的顺序存储就是用一组连续的存储单元存放二叉树中的结点元素,一般按照二叉树结点自上向下、自左向右的顺序存储。(需用‘\’补充二叉树为完全二叉树)
例如:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
A | B | C | D | E | F | G | H | \ | \ | K |
(2)链式储存:二叉树的链式存储结构是用一个链表来存储一棵二叉树,二叉树中每一个结点用链表的一个链结点来存储。
在二叉树中,结点结构通常包括若干数据及若干个指针域,在二叉链表中至少包含三个域:
由于二叉树的存储结构中每一个存储结点有两个指针域,因此,二叉树的链式存储结构也称二叉链表。
2.4二叉树的遍历
所谓二叉树的遍历,是指按某条搜索路径访问树中的每个结点,使得每个结点均被访问一次,并且仅被访问一次。常见的三种遍历算法分别是前序遍历、中序遍历和后序遍历。
(1)先序遍历(DLR):首先访问根结点,其次遍历左子树,最后遍历右子树。
如下图所示二叉树的先序遍历结果为ABDHECFG。
(2)中序遍历(LDR):首先遍历左子树,其次访问根结点,最后遍历右子树。并且在遍历左右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。
如下图所示二叉树的中序遍历结果为HDBEAFCG。
(3)后序遍历(LRD):首先遍历左子树,其次遍历右子树,最后访问根结点。并且在遍历左右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。
如下图所示二叉树的中序遍历结果为HDEBFGCA。