数据结构
常用八种数据结构

常见的数据结构包括数组、链表、队列、栈、树、堆、哈希表和图,每种数据结构都有其特点,如下:常见数据结构• 1.数组• 2.链表• 3.队列• 4.栈• 5.树• 6.图•7.哈希表•8.堆1.数组特点:•固定大小的线性数据结构•支持快速随机访问•插入和删除效率比较低一般应用于需要快速随机访问元素的场景。
案例:2.链表特点:•动态大小的数据结构•插入和删除效率比较高•不支持快速随机访问适用于需要频繁插入和删除元素的场景案例:3.队列特点:•先进先出•插入操作在队尾进行,删除操作在队头进行应用于需要先进先出访问元素的场景,如任务调度、消息队列等案例:4.栈特点:•先进后出•插入和删除在栈顶进行应用于需要后进先出访问元素的场景,如函数调用栈、表达式求值等案例:5.树特点:•非线性,由节点和边组成•树中的节点有层次关系,一个节点可以有多个子节点应用于需要表示层次结构的场景,比如文件系统、组织结构等案例:6.图特点:•非线性,由节点和边组成•图中的节点可以通过边来相互连接应用于需要表示网络结构的场景,如社交网络、交通网络等。
案例:7.哈希表特点:•基于哈希函数实现的键值对数据结构•支持快速的插入、删除和查找操作应用于需要快速查找和插入操作的场景,如字典、缓存等。
案例:8.堆特点:•堆是一颗完全二叉树•分为最大堆和最小堆•最大堆:每个节点的值都大于或等于其子节点的值。
•最小堆:每个节点的值都小于或等于其子节点的值。
•支持快速获取最大值或最小值的操作。
适用于优先队列,堆排序和实现高效的合并K个有序链表问题。
案例。
什么是数据结构

什么是数据结构数据结构是计算机科学中的基础概念之一,它是指组织和存储数据的方式,以及数据之间的关系和操作。
在计算机程序设计中,数据结构是指特定数据的组织形式,这些数据可以是数字、字符、实体对象等。
数据结构的选择对于程序的效率和功能具有重要影响。
一、数据结构的基本概念数据结构主要包括以下几个基本概念:1. 数据元素:数据元素是构成数据的最小单位,可以是单个的基本数据类型,也可以是多个基本数据类型组合而成的复合数据类型。
2. 数据项:数据元素中的一个个数据项是可以进行操作的最小单位,也可以理解为一个字段或属性。
3. 数据对象:数据对象是指具有相同性质的数据元素的集合,是数据集合的抽象。
4. 数据结构:数据结构是指数据元素之间的关系以及支持的操作,可以是线性的、非线性的、顺序的、层次的等不同的组织方式。
5. 数据类型:数据类型是一种特定的数据结构,用于描述数据的存储格式和支持的操作。
常见的数据类型包括整型、浮点型、字符型等。
6. 数据存储:数据存储是指数据在计算机中的具体储存形式,可以是内存中的数组、链表,也可以是硬盘中的文件等。
二、常见的数据结构1. 数组:数组是把具有相同类型的数据元素按照一定顺序排列并以连续的内存空间表示的数据结构,通过下标可以快速定位元素。
2. 链表:链表是由若干个结点组成,每个结点包含数据元素和指向下一个结点的指针,它的特点是空间不连续,插入、删除操作较灵活。
3. 栈:栈是一种先进后出的数据结构,只允许在栈顶进行插入和删除操作,类似于弹夹。
4. 队列:队列是一种先进先出的数据结构,只允许在队尾插入元素,在队头删除元素,类似于排队。
5. 树:树是由若干个结点组成的层次结构,每个结点可以有多个子结点,用于表示具有层次关系的数据。
6. 图:图是由若干个结点和边组成,结点表示数据元素,边表示结点之间的关系,用于表示具有复杂关系的数据。
三、数据结构的应用数据结构在计算机领域有广泛的应用,常见的应用包括:1. 数据库管理系统:数据库中的数据需要通过适当的数据结构进行组织和管理,如B+树、散列表等。
数据结构大纲知识点

数据结构大纲知识点一、绪论。
1. 数据结构的基本概念。
- 数据、数据元素、数据项。
- 数据结构的定义(逻辑结构、存储结构、数据的运算)- 数据结构的三要素之间的关系。
2. 算法的基本概念。
- 算法的定义、特性(有穷性、确定性、可行性、输入、输出)- 算法的评价指标(时间复杂度、空间复杂度的计算方法)二、线性表。
1. 线性表的定义和基本操作。
- 线性表的逻辑结构特点(线性关系)- 线性表的基本操作(如初始化、插入、删除、查找等操作的定义)2. 顺序存储结构。
- 顺序表的定义(用数组实现线性表)- 顺序表的基本操作实现(插入、删除操作的时间复杂度分析)- 顺序表的优缺点。
3. 链式存储结构。
- 单链表的定义(结点结构,头指针、头结点的概念)- 单链表的基本操作实现(建立单链表、插入、删除、查找等操作的代码实现及时间复杂度分析)- 循环链表(与单链表的区别,操作特点)- 双向链表(结点结构,基本操作的实现及特点)三、栈和队列。
1. 栈。
- 栈的定义(后进先出的线性表)- 栈的基本操作(入栈、出栈、取栈顶元素等操作的定义)- 顺序栈的实现(存储结构,基本操作的代码实现)- 链栈的实现(与单链表的联系,基本操作的实现)- 栈的应用(表达式求值、函数调用栈等)2. 队列。
- 队列的定义(先进先出的线性表)- 队列的基本操作(入队、出队、取队头元素等操作的定义)- 顺序队列(存在的问题,如假溢出)- 循环队列的实现(存储结构,基本操作的代码实现,队空和队满的判断条件)- 链队列的实现(结点结构,基本操作的实现)- 队列的应用(如操作系统中的进程调度等)四、串。
1. 串的定义和基本操作。
- 串的概念(字符序列)- 串的基本操作(如连接、求子串、比较等操作的定义)2. 串的存储结构。
- 顺序存储结构(定长顺序存储和堆分配存储)- 链式存储结构(块链存储结构)3. 串的模式匹配算法。
- 简单的模式匹配算法(Brute - Force算法)的实现及时间复杂度分析。
数据结构基础知识

复习提纲第一章数据构造概述根本概念与术语〔P3〕1.数据构造是一门研究非数值计算程序设计问题中计算机的操作对象以及他们之间的关系和操作的学科.2.数据是用来描述现实世界的数字,字符,图像,声音,以及能够输入到计算机中并能被计算机识别的符号的集合2.数据元素是数据的根本单位3.数据对象一样性质的数据元素的集合4.数据构造三方面容:数据的逻辑构造.数据的存储构造.数据的操作.〔1〕数据的逻辑构造指数据元素之间固有的逻辑关系.〔2〕数据的存储构造指数据元素及其关系在计算机的表示( 3 ) 数据的操作指在数据逻辑构造上定义的操作算法,如插入,删除等.5.时间复杂度分析--------------------------------------------------------------------------------------------------------------------1、名词解释:数据构造、二元组2、根据数据元素之间关系的不同,数据的逻辑构造可以分为集合、线性构造、树形构造和图状构造四种类型。
3、常见的数据存储构造一般有四种类型,它们分别是___顺序存储构造_____、___链式存储构造_____、___索引存储构造_____和___散列存储构造_____。
4、以下程序段的时间复杂度为___O(N2)_____。
int i,j,*;for(i=0;i<n:i++) n+1for(j=0;j<n;j++) n+1*+=i;------------------------------------------------------------------------------------------------------------------第二章线性表1.顺序表构造由n(n>=0)个具有一样性质的数据元素a1,a2,a3……,an组成的有穷序列//顺序表构造#define MA*SIZE 100typedef int DataType;Typedef struct{DataType items[MA*SIZE];Int length;}Sqlist,*LinkList;2.单链表(1)链表结点构造//链表的节点构造Typedef struct Node{int data;struct Node *ne*t;} Lnode,*Pnode,*LinkList;(2)结点遍历void TraverseList(LinkList t){LinkList p;while(t){p=t;t=t->ne*tfree(p);}}(3)链表操作算法:初始化、插入、输出、删除void InitList(LinkList *h){*h=(LinkList)malloc(sizeof(LNode));if(!h){print("初始化错误〞);return;}(*h)->ne*t=NULL;}void InsertList(LinkList h,int pos,datatype *){ LinkList p=h,q;int i=0;while(p&&i<pos-1){p=p->ne*t;i++;}if(!p||i>pos-1)print("插入位置出错!!〞);InitList(&q);q->ne*t=NULL;q->data=*;}void DeleteList(LinkList h,int pos){LinkList p=h,q;int i=0;while(p&&i<pos-1){p=p->ne*t;i++;}if(!p||i>pos-1){cout<<〞删除位置错误〞;return;}q=p->ne*t;p->ne*t=q->ne*t;free(q);}-----------------------------------------------------------------------------------------------------------------1、线性表中,第一个元素没有直接前驱,最后一个元素没有直接后驱。
什么是数据结构

什么是数据结构什么是数据结构1. 数据结构的定义数据结构是计算机科学中研究数据组织、存储方式以及数据操作的一门学科。
它关注的是如何在计算机中高效地存储和组织数据,以及如何设计和实现有效的数据操作算法。
2. 数据结构的重要性在计算机领域中,处理和操作数据是一项基本任务。
无论是简单的文本文件,还是复杂的数据库系统,数据都是核心。
因此,合理的数据组织和高效的数据操作算法对于计算机程序的性能和质量至关重要。
3. 数据结构的分类数据结构可以根据数据的组织方式进行分类。
常见的数据结构包括:(1) 线性结构线性结构是数据元素之间存在一对一关系的结构。
它的特点是:数据元素之间只有前后关系,不存在分支。
常见的线性结构有数组、链表、栈和队列等。
(2) 树形结构树形结构是数据元素之间存在一对多的关系的结构。
它的特点是:每个元素之间都有一个明确的父节点和零个或多个子节点。
常见的树形结构有二叉树、堆和树等。
(3) 图形结构图形结构是数据元素之间存在多对多的关系的结构。
它的特点是:数据元素之间的关系可以是任意的。
常见的图形结构有无向图和有向图等。
4. 数据结构的基本操作在数据结构中,有一些基本操作是常用且必不可少的。
常见的数据结构基本操作包括:(1) 插入插入操作是向指定位置插入一个新的元素。
对于不同的数据结构,插入操作的实现方式也不同。
(2) 删除删除操作是从数据结构中删除指定位置的元素。
删除操作的实现方式也因数据结构的不同而有所差异。
(3) 查找查找操作是在数据结构中搜索并定位指定的元素。
不同的数据结构可能采用不同的查找算法。
(4) 修改修改操作是对数据结构中的指定元素进行更改。
(5) 遍历遍历操作是指按照某种方式访问并处理数据结构中的所有元素。
5. 数据结构的应用数据结构不仅仅是一种抽象的概念,它也具有广泛的应用。
以下是数据结构在实际应用中的一些常见用途:(1) 数据库系统在数据库系统中,数据结构被用来组织和管理存储在数据库中的数据。
数据结构

第1章绪论1.1 什么是数据结构数据与数据之间的关系1.2 基本概念和术语1.基本定义(1).数据(Data) :是客观事物的符号表示。
在计算机科学中指的是所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素(Data Element) :是数据的基本单位,在程序中通常作为一个整体来进行考虑和处理。
(2)数据项(Data Item):一个数据元素可由若干个数据项组成。
数据项是数据的不可分割的最小单位。
数据项是对客观事物某一方面特性的数据描述。
数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。
2.举例如字符集合C={‘A’,‘B’,‘C’,…}--C表示字符对象;A ,B等表示数据元素;再如学生集合Students={“Zhangsan”, “Lisi”,…}Zhangsan(ID,name,age,grade,…)……--Students表示学生对象;“Zhangsan”、“Lisi”表示数据元素;Zhangsan的ID、name、age等表示数据项。
3.数据结构的形式定义数据结构的形式定义是一个二元组:Data-Structure=(D,S)其中:D是数据元素的有限集,S是D上关系的有限集4.逻辑结构与物理结构(1)数据元素之间的关系可以是元素之间代表某种含义的自然关系,也可以是为处理问题方便而人为定义的关系,这种自然或人为定义的“关系”称为数据元素之间的逻辑关系,相应的结构称为逻辑结构。
(2)数据结构在计算机中的表示(映像)称为数据的物理结构。
数据结构的存储方式1)顺序存储结构:用数据元素在存储器中的相对位置来表示数据元素之间的逻辑结构(关系)。
2)链式存储结构:在每一个数据元素中增加一个存放另一个元素地址的指针(pointer ),用该指针来表示数据元素之间的逻辑结构(关系)。
3)例:设有数据集合A={3.0,2.3,5.0,-8.5,11.0} ,两种不同的存储结构。
数据结构百度百科

数据结构概述数据结构是计算机存储、组织数据的方式。
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。
数据结构往往同高效的检索算法和索引技术有关。
目录[隐藏][编辑本段]基本简介数据结构在计算机科学界至今没有标准的定义。
个人根据各自的理解的不同而有不同的表述方法:Sartaj Sahni在他的《数据结构、算法与应用》一书中称:“数据结构是数据对例的数据元素之间的各种联系。
这些联系可以通过定义相关的函数来给出。
”他将数据对象(data object)定义为“一个数据对象是实例或值的集合”。
Clifford A.Shaffer在《数据结构与算法分析》一书中的定义是:“数据结构是ADT (抽象数据类型 Abstract Data Type)的物理实现。
”Lobert L.Kruse在《数据结构与程序设计》一书中,将一个数据结构的设计过程分成抽象层、数据结构层和实现层。
其中,抽象层是指抽象数据类型层,它讨论数据的逻辑结构及其运算,数据结构层和实现层讨论一个数据结构的表示和在计算机内的存储细节以及运算的实现。
[编辑本段]重要意义一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。
对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。
在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。
许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。
许多时候,确定了数据结构后,算法就容易得到了。
有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。
不论哪种情况,选择合适的数据结构都是非常重要的。
选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。
常见的数据结构有哪些

常见的数据结构有哪些数据结构是一种用于组织和存储数据的方法。
在计算机科学中,数据结构是必不可少的,因为它们用于存储和管理大量的数据。
常见的数据结构包括数组、链表、栈、队列、哈希表和树等。
本文将详细介绍这些数据结构的定义、特点和应用。
一、数组数组是一种非常基本的数据结构,它是一组相同类型的数据元素的集合。
数组的每个元素可以通过索引访问,索引从零开始,并按顺序排列。
数组中的元素可以是任何数据类型,比如整数、浮点数、字符或字符串等。
数组的主要特点是访问元素的时间复杂度为O(1),查找和修改元素都非常快,但插入和删除元素的时间复杂度较高,为O(n)。
因此,数组适合用于静态的、预先知道元素数目的情况下,而不适合在动态的数据集合中进行插入和删除操作。
二、链表链表是一种动态的、常用于动态内存分配的数据结构。
链表由一系列节点组成,每个节点包含两个部分:数据和指向下一个节点的指针。
链表的首节点称为头结点,最后一个节点称为尾节点,尾节点的指针指向NULL或空。
链表可以分为单向链表和双向链表。
单向链表只有一个指针指向下一个节点,而双向链表有两个指针,一个指向前一个节点,一个指向后一个节点。
链表的主要特点是插入和删除元素的时间复杂度为O(1),因为只需要修改链表中的节点指针,而不需要整体移动元素。
但是,访问元素的时间复杂度为O(n),因为链表中的元素不是连续的,需要从头结点开始遍历整个链表。
三、栈栈是一种具有“先进后出”(Last In First Out,LIFO)特点的数据结构。
栈的操作包括push(入栈)和pop(出栈),压入栈中的最后一个元素会成为第一个出栈的元素。
栈的主要应用是在函数调用中保存临时变量和返回地址。
当一个函数被调用时,它的局部变量和参数被压入栈中,然后函数返回时,这些变量和参数被弹出栈。
栈也用于处理表达式、计算器、括号匹配、深度优先搜索和回溯算法等。
通常,栈的实现采用链表或数组。
四、队列队列是一种具有“先进先出”(First In First Out,FIFO)特点的数据结构。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1) 栈的结构与定义 (2) 顺序栈操作算法:入栈、出栈、判断栈空等 (3) 链栈的结构与定义 2. 队列 (1) 队列的定义 --------------------------------------------------------------------------------------------------------------1、一个栈的入栈序列为“ABCDE”,则以下不可能的出栈序列是(B) A. BCDAE B. EDACB C. BCADE D. AEDCB 2、栈的顺序表示中,用TOP表示栈顶元素,那么栈空的条件是(D) A. TOP==STACKSIZE B. TOP==1 C. TOP==0 D. TOP==-1 3、允许在一端插入,在另一端删除的线性表称为队列。插入的一端为 队尾,删除的一端为队头。 4、栈的特点是后进先出,队列的特点是先进先出。 5、对于栈和队列,无论他们采用顺序存储结构还是链式存储结构,进 行插入和删除操作的时间复杂度都是O(1)。 6、已知链栈Q,编写函数判断栈空,如果栈空则进行入栈操作,否则出 栈并输出。(要求判断栈空、出栈、入栈用函数实现) //结构体 typedef struct SNode{……}SNode, *LinkStack; //判断栈空 int StackEmpty(LinkStack top) { if(top->next==NULL) return 1; else return 0; } //入栈 int Push(LinkStack top, DataType e) { SNode *p=new SNode; if(!p)
1、对于上图所示的有向图,其深度优先搜索遍历序列为ADFECB,广度 优先搜索遍历序列为ABCDEF,其拓扑排序序列为ABDFCE。 2、一个具有N个顶点的完全无向图的边数为n(n-1)/2;一个具有N个顶点
复习提纲
第1章 数据结构概述 基本概念与术语(P3) 1. 数据结构 一门研究非数值计算程序设计问题中计算机的操作多像以及 它们之间的关系和操作等的学科 2. 数据 用来描述现实世界的数字 字符 图像 声音 以及能够输入到计 算机中并能被计算机处理的符号集合 2.数据元素 是数据的基本单位,是数据这个集合中的个体,也称为元素 结点 顶点 记录 3.数据对象 是具有相同性质的数据元素的集合,是数据的一个子集 4.数据结构 (1)数据的逻辑结构 是相互之间存在一种或多种特定关系的数据元素的集合 (2)数据的存储结构 是数据元素之间存在的固有的逻辑关系,常简称为数据结构 5.时间复杂度分析 ------------------------------------------------------------------------------------------------------------------1、名词解释:数据结构、二元组
4、完全二叉树必须满足的条件为前n个结点的树形结构与其满二叉树的 前n个结点的树形结构要相同。 5、哈夫曼树不存在度为1的结点。 6、根据二叉搜索树插入算法画出下列数据{12, 56,23,76,18,34, 47,6}依次插入后生成的二叉搜索树,并写出查找“76“的过程。 12 6 56 23 76 18 34 47 查找76: 与12比较: 大 , 向右子树查找
与56比较: 大 , 向右子树查找 与76比较: 相等 , 查找成功! 7、有5个带权结点,其权值分别为2,5,3,7,11,根据哈夫曼算法构 建该树,并计算该树的带权路径长度。 WPL=2*4+3*4+5*3+7*2+11*1=60 11 7 5 2 3 8、写出先序和中序遍历下面森林得到的序列
二元组的定义: <D,R>
2、根据数据元素之间关系的不同,数据的逻辑结构可以分为 集合、线 性结构、树形结构和图状结构四种类型。 3、常见的数据存储结构一般有四种类型,它们分别是 顺序存储结构、 链式存储结构、索引存储结构和散列存储结构。 4、以下程序段的时间复杂度为O(n^2)。
int i,j,x; for(i=0;i<n:i++) for(j=0;j<n;j++) x+=i; ----------------------------------------------------------------------------------------------------------------第2章 线性表 1. 顺序表结构 2. 单链表 (1) 链表结点结构 (2) 结点遍历 (3) 链表操作算法:初始化、插入、输出、删除 ---------------------------------------------------------------------------------------------------------------1、线性表中,第一个数据元素没有直接前驱,最后一个数据 元素没有 直接后驱。 2、在一个单链表中,若p所指结点是q所指结点的前驱结点,则删除结 点q的操作语句为p->next=q->next, free(q)。 3、在长度为N的顺序表仲,插入一个新元素平均需要移动表中N/2个元 素,删除一个元素平均需要移动(N-1)/2个元素。 4、若线性表的主要操作是在最后一个元素之后插入一个元素或删除最 后一个元素,则采用顺序存储结构最节省运算时间。 5、已知顺序表中每个元素占用3个存储单元,第13个元素的存储地址为 336,则顺序表的首地址为300。 6、设有一带头结点单链表L,请编写该单链表的初始化,插入、输出和 删除函数。(函数名自定义) //结构体 typedef struct SNode{…..}SNode,LIST; //初始化单链表
--------------第六章 树和二叉树 1. 树 (1) 树的概念及术语 2. 二叉树 (1) 二叉树的定义 (2) 特殊二叉树 ●满二叉树 ●完全二叉树 (3)二叉树的性质:性质1-5 1.第i层最多有2^(i-1)个结点。 2.深度h的非空二叉树最多有2^h-1个结点。 3.度为0的结点数为a,度为2的结点数为b。则a=b+1。 4.最有n个结点的完全二叉树深度h=|log2n|+1。 5.略。 3. 二叉树的遍历 (1) 前序遍历 根左右 (2) 中序遍历 左中右 (3) 后序遍历 左右中 4. 森林 (1)森林的遍历:先序遍历森林和中序森林 5. 二叉搜索树 (1)二叉搜索树的定义及构建 6. 哈夫曼树 (1)哈夫曼树的基本概念 (2)哈夫曼树的构造算法思想及构造过程 --------------------------------------------------------------------------------------------------------------------1、已知一棵完全二叉树有47个结点,则该二叉树有(C)个叶子结点。 A. 6 B. 12 C. 24 D.48
{ printf(“入栈操作出错!\n”); return 0; } p->data=e; //插入 p->next=top->next; top->next=p; return 1; } //出栈 int Pop(LinkStack top , DataType *e) { SNode *p; if(!top->next) { printf(“栈空,无法完成出栈操作!\n”); return 0; } p=top->next; top->next=p->next; //删除栈顶结点 *e=p->data; free(p); return 1; } //main函数 视已初始化 void main() { if( StackEmpty(top) ) //栈空 Push(top, e); else Pop(top,*e); //出栈 } ------------------------------------------------------------------------------------------------------
2、已知遍历一棵二叉树的前序序列ABCDEFG和中序序列
CBEDAFG,那么是下面哪棵树(C)。
A B C F D E G A B C F D E G
A
B B C F D E G A B C F
D E G
C
D
3、如下图所示的一棵二叉树进行遍历,得到的遍历序列未CADREFB, 则该遍历序列是(B)的结果。 R B A E D C F A. 前序遍历 B. 中序遍历 C. 后序遍历 D. 层次遍历
{ cout<<p->data<<" "; p=p->next; } cout<<endl; } //删除 int ListDelete(LIST *H, int pos, ElemTate *item) { LIST *p=H, *q; int i=0; while(p->next && i<pos-1) //寻找被删结点的前驱 { p=p->next; i++; } if(!p->next || i>pos-1) { printf(“删除位置不合法!”); return 0; } q=p->next; //删除 p->next=q->next; *item=q->data; //返回被删结点 free(q); return 1; } --------------------------------------------------------------------------------------------------------------第3章 栈和队列 1. 栈
a
11
d h j b
k
c i e f
先序: 中序:
abdjcefhi djbaechif