数据结构复习重点要点
数据结构考研复习重点归纳

数据结构考研复习重点归纳数据结构是计算机科学中非常重要的一门基础课程,考研复习数据结构时,需要重点掌握的内容有以下几个方面。
1.线性表:线性表是数据结构中最基本的一种结构,常见的线性表有数组、链表和栈等。
考生需要掌握线性表的定义、插入、删除、查找等基本操作,并能够分析它们的时间复杂度。
2.树:树是一种非常重要且常见的数据结构,它具有分层结构和层次关系。
其中,二叉树是最简单也是最基本的一种树结构,树的遍历(如前序遍历、中序遍历和后序遍历)是树算法中的重要内容。
此外,还要了解一些特殊的树结构,如平衡树和B树等。
3.图:图是由节点和边组成的一种数据结构,它是一种非常灵活的结构,常用来表示各种实际问题中的关系。
在考研复习中,需要掌握图的基本概念(如顶点和边)、图的存储结构(如邻接矩阵和邻接表)以及图的遍历算法(如深度优先和广度优先)等。
4.查找和排序:在实际问题中,经常需要查找和排序数据。
查找算法(如顺序查找、二分查找和哈希查找)和排序算法(如冒泡排序、插入排序和快速排序)是数据结构中常见的算法,考生需要熟练掌握这些算法的原理和实现方法。
此外,还要了解一些高级的查找和排序算法,如二叉查找树和归并排序等。
5.散列表:散列表(也称哈希表)是一种特殊的数据结构,它利用散列函数将数据映射到一个固定大小的数组中。
散列表具有快速的查找和插入操作,常用于实现字典和数据库等应用。
在考研复习中,需要了解散列表的原理和实现方法,以及处理冲突的方法,如链地址法和开放地址法。
6.动态规划:动态规划是一种解决问题的数学方法,也是一种重要的算法思想。
在考研复习中,需要掌握动态规划的基本原理和解题思路,以及常见的动态规划算法,如背包问题和最长公共子序列等。
7.算法复杂度分析:在考研复习中,需要有一定的算法分析能力,能够对算法的时间复杂度和空间复杂度进行分析和估算。
此外,还要能够比较不同算法的效率,并选择合适的算法来解决实际问题。
除了以上重点内容,考生还要注意掌握一些基本的编程知识,如指针、递归和动态内存分配等。
数据结构复习资料复习提纲知识要点归纳

数据结构复习资料复习提纲知识要点归纳数据结构复习资料:复习提纲知识要点归纳一、数据结构概述1. 数据结构的定义和作用2. 常见的数据结构类型3. 数据结构与算法的关系二、线性结构1. 数组的概念及其特点2. 链表的概念及其分类3. 栈的定义和基本操作4. 队列的定义和基本操作三、树结构1. 树的基本概念及定义2. 二叉树的性质和遍历方式3. 平衡二叉树的概念及应用4. 堆的定义和基本操作四、图结构1. 图的基本概念及表示方法2. 图的遍历算法:深度优先搜索和广度优先搜索3. 最短路径算法及其应用4. 最小生成树算法及其应用五、查找与排序1. 查找算法的分类及其特点2. 顺序查找和二分查找算法3. 哈希查找算法及其应用4. 常见的排序算法:冒泡排序、插入排序、选择排序、归并排序、快速排序六、高级数据结构1. 图的高级算法:拓扑排序和关键路径2. 并查集的定义和操作3. 线段树的概念及其应用4. Trie树的概念及其应用七、应用案例1. 使用数据结构解决实际问题的案例介绍2. 如何选择适合的数据结构和算法八、复杂度分析1. 时间复杂度和空间复杂度的定义2. 如何进行复杂度分析3. 常见算法的复杂度比较九、常见问题及解决方法1. 数据结构相关的常见问题解答2. 如何优化算法的性能十、总结与展望1. 数据结构学习的重要性和难点2. 对未来数据结构的发展趋势的展望以上是数据结构复习资料的复习提纲知识要点归纳。
希望能够帮助你进行复习和回顾,加深对数据结构的理解和掌握。
在学习过程中,要注重理论与实践相结合,多进行编程练习和实际应用,提高数据结构的实际运用能力。
祝你复习顺利,取得好成绩!。
数据结构考研复习要点

考研题型包括:简答题;方法选择(分析);构造题;算法题。
第一章绪论1. 数据结构的基本概念:数据、数据元素、数据对象、数据结构2. 抽象数据类型:数据对象、逻辑关系、一组操作。
ADT的特点:数据抽象、信息隐蔽3. 数据结构三要素:数据元素间的逻辑关系、物理存储和一组操作。
元素间的逻辑关系:集合、线性、树、图元素在计算机内存中的存储结构:顺序、非顺序4. 算法的定义:规则的有限集合,为了解决某个特定问题而规定的一系列基本操作。
算法特性:有限性、确定性、可行性、输入、输出算法设计目标:正确性、可读性、鲁棒性、高效率低存储5. 算法性能评价:时间和空间算法时间复杂度:T(n)=O(f(n))。
它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。
其中f(n)是问题规模n的某个函数。
求解算法的时间复杂度的具体步骤是:⑴找出算法中的基本语句;⑵计算基本语句的执行次数的数量级;保留基本语句执行次数的函数中的最高次幂,忽略所有低次幂和最高次幂的系数。
⑶用大Ο记号表示算法的时间性能。
将基本语句执行次数的数量级放入大Ο记号中。
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < { O(2^n) < O(n!) < O(n^n) }【例】分析下面各算法的时间复杂度算法1:int fact(int n){ if (n<=1) return 1;return n*fact(n-1);}算法2:i=l;while (i<n){for(j=l;j<=n;j++)x=x+l;i=i*2;}算法3:for(i=l;i<=n;i++){ j=l;while (j<=i){x+=l; j++;}}算法:4void sort(int b[],int n){ int i, j, k;for (i=0; i<n-1; i++){ k = i;for (j=i+1; j<n; j++)if (b[k] > b[j]) k = j;x = b[i]; b[i] = b[k]; b[k] = x;}}算法5void add(int n){ int i = 0, s = 0;while (s<n){ i++;s = s + i;}}设while循环语句执行次数为T(n),则算法6void hanoi(int n, char a, char b, char c){ if (n==1) printf("move %d disk from %c to %c \n", n, a, c);else{ hanoi(n-1, a, c, b);printf("move %d disk from %c to %c \n", n, a, c);hanoi(n-1, b, a, c);}}算法7:void PreOrder(BiTree T){ if (T){ v isit(T->daata)PreOrder(T->lchild);PreOrder(T->rchild);}}算法空间复杂度:空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。
数据结构_(严蔚敏C语言版)_学习、复习提纲.

期末复习 第一章 绪论 复习1、计算机算法必须具备输入、输出、可行性、确定性、有穷性5个特性。
2、算法分析的两个主要方面是空间复杂度和时间复杂度。
3、数据元素是数据的基本单位。
4、数据项是数据的最小单位。
5、数据结构是带结构的数据元素的集合。
6、数据的存储结构包括顺序、链接、散列和索引四种基本类型。
基础知识数据结构算 法概 念逻辑结构 存储结构数据运算数据:计算机处理的信息总称 数据项:最小单位 数据元素:最基本单位数据对象:元素集合数据结构:相互之间存在一种或多种特定关系的数据元素集合。
概念:数据元素之间的关系 线性结构:一对一非线性结构 树:一对多 图:多对多顺序存储结构 链表存储结构 索引。
散列。
算法描述:指令的有限有序序列算法特性 有穷性 确定性 可行性 输入 输出 算法分析时间复杂度 空间复杂度第二章 线性表 复习1、在双链表中,每个结点有两个指针域,包括一个指向前驱结点的指针 、一个指向后继结点的指针2、线性表采用顺序存储,必须占用一片连续的存储单元3、线性表采用链式存储,便于进行插入和删除操作4、线性表采用顺序存储和链式存储优缺点比较。
5、简单算法第三章 栈和队列 复习线性表顺序存储结构链表存储结构概 念基本特点基本运算定义逻辑关系:前趋 后继节省空间 随机存取 插、删效率低 插入 删除单链表双向 链表 特点一个指针域+一个数据域 多占空间 查找费时 插、删效率高 无法查找前趋结点运算特点:单链表+前趋指针域运算插入删除循环 链表特点:单链表的尾结点指针指向附加头结点。
运算:联接1、 栈和队列的异同点。
2、 栈和队列的基本运算3、 出栈和出队4、 基本运算第四章 串 复习栈存储结构栈的概念:在一端操作的线性表 运算算法栈的特点:先进后出 LIFO初始化 进栈push 出栈pop队列顺序队列 循环队列队列概念:在两端操作的线性表 假溢出链队列队列特点:先进先出 FIFO基本运算顺序:链队:队空:front=rear队满:front=(rear+1)%MAXSIZE队空:frontrear ∧初始化 判空 进队 出队取队首元素第五章 数组和广义表 复习串存储结构运 算概 念顺序串链表串定义:由n(≥1)个字符组成的有限序列 S=”c 1c 2c 3 ……cn ”串长度、空白串、空串。
数据结构 复习重点

数据结构复习重点谁让我找到你们了.第一章1.数据是信息的载体,它能够被计算机识别、存储和加工处理。
2.数据元素是数据的基本单位。
有些情况下,数据元素也称为元素、结点、顶点、记录。
3.数据结构指的是数据之间的相互关系,即数据的组织形式。
一般包括三个方面的内容:①数据元素之间的逻辑关系,也称为数据的逻辑结构;②数据元素及其关系在计算机存储器内的表示,称为数据的存储结构;③数据的运算,即对数据施加的操作。
4.数据类型是一个值的集合以及在这些值上定义的一组操作的总称。
按"值"是否可分解,可将数据类型划分为两类:①原子类型,其值不可分解;②结构类型,其值可分解为若干个成分。
5.抽象数据类型是指抽象数据的组织和与之相关的操作。
可以看作是数据的逻辑结构及其在逻辑结构上定义的操作。
6.数据的逻辑结构简称为数据结构。
数据的逻辑结构可分为两大类:①线性结构(~的逻辑特征是若结构是非空集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继);②非线性结构(~的逻辑特征是一个结点可能有多个直接前趋和直接后继)。
7.数据存储结构可用四种基本的存储方法表示:①顺序存储方法(该方法是把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。
由此得到的存储表示称为顺序存储结构);②链接存储方法(该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。
由此得到的存储表示称为链式存储结构);③索引存储方法(该方法通常是在存储结点信息的同时,还建立附加的索引表);④散列存储方法(该方法的基本思想是根据结点的关键字直接计算出该结点的存储地址)。
8.非形式地说,算法是任意一个良定义的计算过程,它以一个或多个值作为输入,并产生一个或多个值为输出。
因此,一个算法是一系列将输入转换为输出的计算步骤。
9.求解同一计算问题可能有许多不同的算法,究竟如何来评价这些算法的好坏以便从中选出较好的算法呢?选用的算法首先应该是"正确"的。
数据结构必考知识点总结

数据结构必考知识点总结在准备考试时,了解数据结构的基本概念和相关算法是非常重要的。
以下是一些数据结构的必考知识点总结:1. 基本概念数据结构的基本概念是非常重要的,包括数据、数据元素、数据项、数据对象、数据类型、抽象数据类型等的概念。
了解这些概念有助于更好地理解数据结构的本质和作用。
2. 线性表线性表是数据结构中最基本的一种,它包括顺序表和链表两种实现方式。
顺序表是将数据元素存放在一块连续的存储空间内,而链表是将数据元素存放在若干个节点中,每个节点包含数据和指向下一个节点的指针。
了解线性表的概念和基本操作是非常重要的。
3. 栈和队列栈和队列是两种特殊的线性表,它们分别具有后进先出和先进先出的特性。
栈和队列的实现方式有多种,包括数组和链表。
掌握栈和队列的基本操作和应用是数据结构的基本内容之一。
4. 树结构树是一种非线性的数据结构,它包括二叉树、多路树、二叉搜索树等多种形式。
了解树的基本定义和遍历算法是必考的知识点。
5. 图结构图是一种非线性的数据结构,它包括有向图和无向图两种形式。
了解图的基本概念和相关算法是非常重要的,包括图的存储方式、遍历算法、最短路径算法等。
6. 排序算法排序是一个非常重要的算法问题,掌握各种排序算法的原理和实现方式是必不可少的。
常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。
7. 查找算法查找是另一个重要的算法问题,包括顺序查找、二分查找、哈希查找、树查找等。
了解各种查找算法的原理和实现方式是必考的知识点之一。
8. 算法复杂度分析算法的时间复杂度和空间复杂度是评价算法性能的重要指标,掌握复杂度分析的方法和技巧是非常重要的。
9. 抽象数据类型ADT是数据结构的一种概念模型,它包括数据的定义和基本操作的描述。
了解ADT的概念和实现方式是非常重要的。
10. 动态存储管理动态存储管理是数据结构中一个重要的问题,包括内存分配、内存释放、内存回收等。
了解动态存储管理的基本原理和实现方式是必考的知识点之一。
数据结构复习要点

A—熟练掌握B—理解C—了解第一章:绪论1. 基本概念:包括数据的逻辑结构、数据的存储结构和数据的相关运算。
C四类数据组织结构:集合、线性表、树形、图状结构C数据的存储方式:顺序存储和链式存储。
B2.算法和分析算法的特征、时间复杂度的分析和常见的时间复杂度增长率排序、空间复杂度B本章重点:分析算法时间复杂度例1. 下面关于算法说法错误的是()A.算法最终必须由计算机程序实现B.为解决某问题的算法同为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的D例2. 以下那一个术语与数据的存储结构无关?()A.栈 B. 哈希表 C. 线索树 D. 双向链表A.例3..求下段程序的时间复杂度:void mergesort(int i, int j){int m;if(i!=j){m=(i+j)/2;mergesort(i,m);mergesort(m+1,j);merge(i,j,m);}}其中mergesort()用于对数组a[n]归并排序,调用方式为mergesort(0,n-1);,merge()用于两个有序子序列的合并,是非递归函数,时间复杂度为。
解:分析得到的时间复杂度的递归关系:为merge()所需的时间,设为cn(c为常量)。
因此令,有有第二章:线性表1.线性表的基本运算:….. C2.线性表的顺序存储(利用静态数组或动态内存分配)。
相应的表示与操作 A3.线性表的链式存储。
相应的表示与操作。
包括循环链表、双向链表。
A4.顺序存储与链式存储的比较:基于时间的考虑--分别适用于静态的和动态的操作:比如静态查找和插入删除);基于空间的考虑-- ……. B这也适用于后面用两种方式存储的其他数据结构。
★本章重点:很熟悉顺序表,单链表、双链表,循环链表的基本操作;并学会在各种链表上进行一些算法设计(与基本操作类似的操作或组合),请仔细复习。
例4.假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。
数据结构重点整理

数据结构重点整理简介数据结构是计算机科学中的重要概念,指的是组织和存储数据的方式。
本文整理了数据结构的重点内容,包括以下章节:1. 数组2. 链表3. 栈4. 队列5. 树6. 图7. 哈希表8. 堆9. 排序算法10. 查找算法1. 数组1.1 定义和基本操作- 数组是一种线性数据结构,用于存储一组相同类型的元素。
每个元素可以通过索引访问。
- 基本操作包括:创建数组、访问元素、修改元素、插入元素、删除元素、获取数组长度等。
1.2 复杂度分析- 时间复杂度:对于不同操作,如访问、插入、删除等,时间复杂度可能不同。
- 空间复杂度:数组的存储空间通常为固定大小,空间复杂度为O(n)。
2. 链表2.1 定义和基本操作- 链表是一种动态数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
- 基本操作包括:创建链表、插入节点、删除节点、访问节点、反转链表等。
2.2 复杂度分析- 时间复杂度:链表的操作时间复杂度与操作位置有关,访问节点的时间复杂度为O(n)。
- 空间复杂度:链表的空间复杂度为O(n)。
3. 栈3.1 定义和基本操作- 栈是一种后进先出(LIFO)的数据结构,只能在栈顶进行插入和删除操作。
- 基本操作包括:入栈、出栈、获取栈顶元素、判断栈是否为空等。
3.2 应用场景- 括号匹配- 表达式求值- 浏览器的前进和后退功能4. 队列4.1 定义和基本操作- 队列是一种先进先出(FIFO)的数据结构,可以在队尾插入元素,在队头删除元素。
- 基本操作包括:入队、出队、获取队头元素、判断队列是否为空等。
4.2 应用场景- 广度优先搜索(BFS)- 缓存5. 树5.1 定义和基本操作- 树是一种非线性数据结构,由节点和边组成,每个节点可以有多个子节点。
- 基本操作包括:创建树、插入节点、删除节点、遍历树等。
5.2 常见的树结构- 二叉树:每个节点最多有两个子节点。
- 二叉搜索树:左子树的键值小于根节点,右子树的键值大于根节点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构(C语言版)》复习重点重点在二、三、六、七、九、十章,考试内容两大类:概念,算法第1章、绪论1.数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
2.数据元素:是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
3.数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
其4类基本结构:集合、线性结构、树形结构、图状结构或网状结构4.逻辑结构:是数据元素之间的逻辑关系的描述。
5.物理结构(存储结构):是数据结构在计算机中的表示(又称映像)。
其4种存储结构:顺序存数结构、链式存数结构、索引存数结构、散列存数结构6.算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。
其5个重要特性:有穷性、确定性、可行性、输入、输出7.时间复杂度:算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间度量记作,T(n)=O(f(n));他表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称做算法的渐进时间复杂度,简称时间复杂度。
例如:(a){++x;s=0;}(b)for(i=1;i<=n;++i){++x;s += x;}(c)for(j=1;j<=n;++j)for(k=1;k<=n;++k){++x;s += x;}含基本操作“x增1”的语句的频度分别为1、n和n²,则这3个程序段的时间复杂度分别为O(1)、O(n)和O(n²),分别称为常量阶、线性阶和平方阶。
还可呈现对数阶O(log n)、指数阶O(2的n次方)等。
8.空间复杂度:算法所需存储空间的度量记作,S(n)=O(f(n))。
第2章、线性表1.线性表:是最常用最简单的一种数据结构,一个线性表是n个数据元素的有限序列。
2. 线性表的顺序存储结构:是用一组地址连续的存储单元依次存储线性表的数据元素。
其特点为逻辑关系上相邻的两个元素在物理位置上也相邻,可以随机存取表中任一元素。
存储位置计算:假设线性表的每个元素需占用L个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置,线性表的第i个数据元素ai的存储位置为LOC(ai)=LOC(a1)+(i-1)*L式中LOC(a1)是线性表第一个元素a1的存储位置,通常称做线性表的起始位置或基地址。
3. 线性表的链式存储结构:是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。
数据元素ai的存储映像称为结点,包括2个域:存数据的数据域、存后继存储位置的指针域。
1) 线性链表(单链表)特点:每个结点只包含1个指针域。
在单链表的第一个结点之前附设的一个结点,称之为头结点。
假设L是LinkList型变量,则L为单链表的头指针,它指向表中第一个结点;L->next为第一个结点地址,L->next=NULL为空表。
生成结点:p=(LinkList)malloc(sizeof(LNode))回收结点:free(q)2) 循环链表特点:表中最后一个结点的指针域指向头结点,整个链表形成一个环。
循环链表的操作与线性链表基本一致,差别仅在于算法中的循环条件不是P或P->next是否为空,而是它们是否等于头指针。
3) 双向链表特点:有2个指针域,其一指向直接后继,另一指向直接前趋。
第3章、栈和队列1. 栈:是限定仅在表尾进行插入或删除操作的线性表。
表尾端称为栈顶,表头端称为栈底,不含有元素的空表称为空栈;栈又称为后进先出的线性表。
2.队列:是一种先进先出的线性表,它只允许在表的一端进行插入,而另一端删除元素。
允许插入的一端叫做队尾,允许删除的一端则称为队头。
1)链队列:用链表示的队列。
一个队列需要两个分别指示队头和队尾的指针(分别成为头指针和尾指针)才能确定唯一。
和单链表一样,也给链队列添加一个头结点,并令头指针指向头结点。
2) 循环队列:与顺序栈类似,除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外,尚需附设两个指针front和rear分别指示队列头元素及队列尾元素的位置。
初始化建空队列时,令front = rear = 0,每当插入新的队列尾元素时,“尾指针增1”;每当删除队列头元素时,“头指针增1”。
第4章、串1. 串:是由零个或多个字符组成的有限序列。
第5章、数组和广义表1. 数组特点:与线性表一样,所有数据元素都必须属于同一数据类型。
2. 数组的顺序存储结构:由于数组一般不作插入或删除操作,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就不会发生变动,因此采用顺序存储结构表示数组。
存储位置计算:假设每个数据元素需占用L个存储单元,则二维数组A中任一元素aij的存储位置可由下式确定以行序为主序的存储结构:LOC(i,j)=LOC(0,0)+(b2*i+j)*L以列序为主序的存储结构:LOC(i,j)=LOC(0,0)+(b2*j+i)*L式中LOC(i,j)是aij的存储位置;LOC(0,0)是a00的存储位置,即二维数组A 的起始存储位置,也称基地址或基址;b2在以行序为主序的存储结构时为每行存储元素的个数(列数),在以列序为主序的存储结构时为每列存储元素的个数(行数)。
3. 广义表:是线性表的推广,也有人称其为列表(lists,用复数形式以示与统称的表list的区别)。
记作LS=(a1,a2,…an),其中LS是广义表(a1,a2,…an)的名称,n是它的长度。
在线性表的定义中,ai(1≤i≤n)只限于是单个元素。
而在广义表的定义中,ai可以是单个元素,也可以是广义表,分别称为广义表LS的原子和子表。
例如:第6章、树和二叉树1. 二叉树:是一种树型的结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。
2. 二叉树的性质:1) 性质1:在二叉树的第i层上至多有2的i减1次方个结点(i≥1)。
2) 性质2:深度为k的二叉树至多有2的k次方减1个结点(k≥1)。
深度为k的二叉树至少有k个结点(k≥1)。
深度为k的完全二叉树至少有2的k次方减2的k减1次方个结点(k≥1)。
3) 性质3:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。
4) 性质4:具有n个结点的完全二叉树的深度为[log2n]+1。
5) 性质5:如果对一棵有n个结点的完全二叉树(其深度为[log2n]+1)的结点按层序编号(从第1层到第[log2n]+1层,每层从左到右),则对任一结点i(1≤i ≤n )有:a) 如果i=1,则结点i 是二叉树的根,无双亲;如果i>1,则其双亲PARENT(i)是结点[i/2]。
b) 如果2i>n ,则结点i 无左孩子(结点i 为叶子结点);否则其左孩子LCHILD(i)是结点2i 。
c) 如果2i+1>n ,则结点i 无右孩子;否则其右孩子RCHILD(i)是结点2i+1。
3. 满二叉树:一颗深度为k 且有2的k 次方减1个结点的二叉树。
4. 完全二叉树:深度为k 的,有n 个结点的二叉树,当且仅当其每一个结点都与深度为k 的满二叉树中编号从1至n 的结点一一对应。
5.遍历二叉树: 1)根据二叉树写遍历结果:a) 先序遍历(先根遍历):DLR - + a * b - c d / e fb) 中序遍历(中根遍历):LDR a + b * c-d - e / f c) 后序遍历(后根遍历):LRDa b c d - * + e f / -2) 根据遍历结果画二叉树:一棵二叉树的先序、中序和后序序列分别如下,其中有部分未给出,试求出空格处的结点字符,并画出该二叉树。
先序:__B__EHI__FG__K中序:D__HEIA__CJG__后序:__H__EBF__KG__A解题思路:a) 由先序或后序确定根结点;如本题后序最后一个为A ,根结点为A ,所以先序第一个空就为A 。
b) 在中序找出根结点,根结点左侧为左子树,右侧为右子树;如本题D__HEI 为左子树,__CJG__为右子树。
c) 由先序确定紧跟在根结点后的左子树根;如本题紧跟在A 后的是B ,B 为左子树根,中序根结点的左子树只有一个空,所以为B 。
d) 继续由中序确定左子树根的左右子树,左侧为左子树,右侧为右子树;如本题B 的左子树为D ,右子树为HEI ,所以先序第二个空为D 。
e) 重复c)、d)步骤确定整棵左子树;如本题先序中紧跟在D 后的是E ,E 为B 的右子树,由中序中看出E 左子树为H ,右子树为I ,补充后序填空,前两空分别为D 和I 。
f) 由后序确定右子树根的左子树,再由中序确定右子树根;如本题紧跟在B 后的是F ,F 为右子树根的左子树,已知中序__CJG__为右子树,F 只可能第一个空,那第二个空为K,补全先序、中序、后序填空并可画出二叉树。
6.森林与二叉树的转换:1) 树转换成二叉树:连兄弟,留长子,删孩子。
a) 连线,连接所有兄弟结点。
b) 删线,仅保留双亲与长子结点的连线,删除与其他孩子结点之间的连线。
c) 整理,原有的长子结点为左子树,从兄弟转换为孩子的结点为右子树。
d) 注意,由于树根没有兄弟结点,固树转换为二叉树后,二叉树根结点的右子树必为空。
2) 森林转换成二叉树:连树根及兄弟,留长子,删孩子。
a) 连线,连接每棵树的根结点及所有兄弟结点。
b) 删线,仅保留双亲与长子结点的连线,删除与其他孩子结点之间的连线。
c) 整理,第一棵树根结点为二叉树根结点,原有的长子结点为左子树,从兄弟转换为孩子的结点为右子树。
3) 二叉树转换成树:连左孩子的右孩子及其右孩子…,删原树右孩子。
a) 连线,若某结点X存在左孩子XL,则将这个左孩子的右孩子结点XLR、左孩子的右孩子的右孩子结点XLRR、左孩子的右孩子的右孩子的右孩子结点XLRRR…都与X结点连线。
b) 删线,删除原二叉树的所有双亲与右孩子结点的连线。
c) 整理,原二叉树根结点为树根结点。
4) 二叉树转换成森林:连左孩子的右孩子及其右孩子…,删原树右孩子。
a) 连线,若某结点X存在左孩子XL,则将这个左孩子的右孩子结点XLR、左孩子的右孩子的右孩子结点XLRR、左孩子的右孩子的右孩子的右孩子结点XLRRR…都与X结点连线。
b) 删线,删除原二叉树的所有双亲与右孩子结点的连线。
c) 整理,调整为多棵树的森林。
7.赫夫曼树:又称最优树,是一类带权路径长度最短的树。
a) 两个最小数值组成一对,小的在前,大的在后;如上图中2与4最小,2在前,4在后。