数据结构——树和二叉树
树和二叉树
一. 思维导图
二. 树的基本概念
1. 树的定义
树是由n(n>=0)个结点(或元素)组成的有限集合。
若n=0,它是一棵空树,这就是树的特例;
如果n>0,这n个结点中有且仅有一个结点作为树的根结点,简称为根,其余结点可分为m(m>=0)个互不相交的有限集T1,T2,……,Tm,其中每个子集本身又是一棵符合本定义的树,称为根结点的子树。
2. 树的基本术语
结点的度与树的度
树中某个结点的子树的个数称为该结点的度。树中所有结点的度的最大值称为树的度。通常将度为m的树称为m次树。
分支结点与叶子结点
树中度不为零的结点称为非终端结点,又叫分支结点。度为零的结点称为叶子结点。
路径与路径长度
对于树中任意的两个结点ki和kj,若树中存在一个结点序列(ki,ki1,ki2,……,kin,kij),使得序列中除ki以外的任一结点都是其在序列中的前一个结点的后继结点,则称该结点序列为由ki到kj的一条路径。路径长度是该路径所通过的结点数目减1(即路径上分支数目)。
孩子结点、双亲结点和兄弟结点
在一棵树中,每个结点的后继结点被称为该结点的孩子结点。相应地,该结点被称为孩子结点的双亲结点。具有同一个双亲结点的孩子结点互为兄弟节点。
结点层次和树的高度
树中的每个结点都处在一定的层次上。结点层次或结点深度是从树根开始定义的。根节点为第一层,它的孩子结点为第二层,依此类推,一个结点所在的层次为其双亲结点的层次加1.树中结点的最大层次依次称为树的高度或树的深度。
有序树和无序树
若数中各结点的子树是按照一定的次序从左向右安排的,且相对次序是不能随意变换的,则称为有序树,否则称为无序树。
森林
n个互不相交的树的集合称为森林。
3. 树的基本运算
先根遍历
(1)访问根结点;
(2)按照从左到右的顺序先根遍历根结点的每一棵子树。
后跟遍历
(1)按照从左到右的顺序后根遍历根结点的每一棵子树;
(2)访问根结点。
层次遍历
从根结点开始按从上到下、从左到右的次序访问树中的每一个结点。
4. 树的存储结构
双亲存储结构
双亲存储结构是一种顺序存储结构,用一组连续空间存储树的所有结点,同时在每个结点中附设一个伪指针指示其双亲结点的位置。
孩子链存储结构
在孩子链存储结构中,每个结点不仅包含结点值,还包括指向所有孩子结点的指针。
孩子兄弟链存储结构
孩子兄弟链存储结构是为每个结点设计3个域,即一个数据元素域、一个指向该孩子结点的左边第一个孩子结点的指针域、一个指向该结点的下一个兄弟结点的指针域。
三. 二叉树的基本概念
1. 二叉树的定义
二叉树是一个有限的结点集合,这个集合或者为空,或者由一个根结点和两棵互不相交的称为左子树和右子树的二叉树组成。
2. 二叉树的存储结构
二叉树的顺序存储结构
二叉树的顺序存储结构就是用一组地址连续的存储单元来存放二叉树的数据元素。
二叉树的链式存储结构
二叉树的链式存储结构是指用一个链表来存储一棵二叉树,二叉树中的每一个结点用链表中的一个结点来存储。
3. 二叉树的遍历
先序遍历
(1)访问根节点;
(2)先序遍历左子树;
(3)先序遍历右子树。
中序遍历
(1)中序遍历左子树;
(2)访问根结点;
(3)中序遍历右子树。
后序遍历
(1)后序遍历左子树;
(2)后序遍历右子树;
(3)访问根结点。
层次遍历
(1)访问根结点;
(2)从左到右访问第2层的所有结点;
(3)从左到右访问第3层的所有结点、……、第h层的所有结点。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步