湖北大学知行学院 教师:涂晓帆 Sunday, December 09, 2018

Slides:



Advertisements
Similar presentations
三级偏软考点. 第一章必考点 1. 计算机的进位数制 (1) 计算机中所有数据是二进制 0,1 表示 (2) 在现实生活中人们普遍使用十进制 如何把十进制转换成计算机所识别的二 进制?整数是除 2 取余法,小数是乘 2 取 整法.
Advertisements

数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
二级基础知识 第一章 数据结构与算法 全国计算机等级考试. 1.1 算法  一、算法的概念 解决问题准确而完整的描述。  特征:可行性、确定性、有穷性、拥有足够的 情报。  要素:对数据运算操作(算术、逻辑)通过指 令序列程序来实现、算法的控制结构(执行顺 序)。  算法设计方法: 列举法:列举所有可能.
《程序设计实践》 孙辉 理工配楼104A
计算机网络教程 任课教师:孙颖楷.
一、算法的基本概念 二、数据结构 三、栈和队列 四、排序方法 五、二叉树
——Windows98与Office2000(第二版) 林卓然编著 中山大学出版社
二叉树在树结构的应用中起着非常重要的作用,因为对二叉树的许多操作算法简单,而任何树都可以与二叉树 相互转换,这样就解决了树的
主讲:计算机工程学院 李兰 答疑地点:主教学楼B区213
Visual FoxPro 程序设计 主讲教师:朱扬清 所在单位:电子与信息工程学院 Mobile Phone:
人工智能技术导论 廉师友编著 西安电子科技大学出版社.
数据结构学习考 复习课(2) 主要内容: 第三部分:树、二叉树、森林.
第6章 树和二叉树 树型结构是一类非常重要的非线性结构。直观地,树型结构是以分支关系定义的层次结构。
助教:李伟力 电子科学与技术系 数据结构第二次习题课 助教:李伟力 电子科学与技术系
实用数据结构基础 第6章 树.
第6章 树 数据结构(C++描述).
机械CAD中常用的数据结构.
数据结构与算法 Data Structure Algorithms
第六章 二叉树和树 6.1 二叉树 6.2 二叉树的基本操作与存储实现 6.3 二叉树的遍历 6.4 线索二叉树 6.5 树和森林
第六章 树和森林 1、树、森林的概念 2、二叉树及其表示 3、遍历二叉树和线索二叉树 4、堆 5、树和森林 6、二叉树的计数 7、霍夫曼树
第6章 树与二叉树.
树.
树(三) 2012初赛知识点梳理.
《数据结构》课程简介 李武军 南京大学计算机科学与技术系 2016年秋季.
《数据库原理及应用》课程介绍 信息工程学院 孙俊国
树和二叉树(四).
第6章 树和二叉树 6.1 树的有关概念 6.2 二叉树 6.3 二叉树的遍历 6.4 遍历的应用 6.5 线索二叉树 6.6 树和森林
第六章 树和二叉树.
赵海燕 软件研究所 14 Apr 第5章 树与二叉树 之三 赵海燕 软件研究所 14 Apr
第五章 树与二叉树 树和森林的概念 二叉树 二叉树遍历 线索化二叉树 树与森林 堆 Huffman树.
计算机网络原理 徐明伟
树和二叉树(三).
Ch.6 树
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
二叉树 二叉树 遍历 递归.
第六章 树与二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第六章 树和二叉树.
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
第8章 树和二叉树 树 二叉树 二叉树设计 二叉树遍历 线索二叉树 哈夫曼树 等价问题 树与二叉树的转换 树的遍历 主要知识点.
第5章 树和二叉树 北京师范大学 教育技术学院 杨开城.
数据结构 Data Structure 主讲人:王国军,郑瑾 CSU 中南大学信息院计科系
第5章 树和二叉树 5.1树 5.2二叉树 5.3二叉树的遍历 5.4线索二叉树 5.5树、森林与二叉树的转换 5.6哈夫曼树.
数据结构 Data Structure 主讲人:王国军,郑瑾 CSU 中南大学信息院计科系
第11讲 树和二叉树(二).
第六章 树 2019/1/14.
第六章 树与森林 树和森林的概念 二叉树 (Binary Tree) 二叉树的表示
第五章 树 5.1 树的定义 树是一类重要的非线性数据结构,是以分支关系定义的层次结构 定义
数据结构概论 第6章 树和二叉树 董黎刚 浙江工商大学信电学院.
Tree & Binary Tree.
第一二节 树及二叉树.
无向树和根树.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
顺序表的删除.
第六章 树和二叉树.
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
第六章 二叉树和树 6.1二叉树 6.2二叉树遍历 6.3树和森林 6.4树的应用.
第5节 树 前两章学习的栈和队列属于线性结构。在这种结构中,数据元素的逻辑位置之间呈线性关系,每一个数据元素通常只有一个前件(除第一个元素外)和一个后件(除最后一个元素外)。在实际生活中,可以用线性结构描述数据元素之间逻辑关系的问题是很广泛的,但也有很多问题不能依靠线性结构来解决,例如家谱、行政组织机构等都是非线性的数据结构。其中树就是一种非线性的数据结构。
第一章 绪论 1.1 引言 1.2 逻辑结构和存储结构 1.3 算法.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
教学大纲(甲型,54学时 ) 教学大纲(乙型, 36学时 )
学习数据结构的意义 (C语言版) 《数据结构》在线开放课程 主讲人:李刚
本节内容 1. 平衡二叉树的定义 2.平衡化旋转 3.平衡二叉排序树的插入操作 昆山爱达人信息技术有限公司
最小生成树 最优二叉树.
第五章 树和二叉树.
软件工程课程设计 分组信息说明
Presentation transcript:

湖北大学知行学院 教师:涂晓帆 Sunday, December 09, 2018 数据结构 湖北大学知行学院 教师:涂晓帆 Sunday, December 09, 2018

目录 自我介绍 课程介绍 教学内容 FAQ

自我介绍 我的名字:涂晓帆 我的电话:18120556880 我的邮箱:7633927@qq.com 我的主页:tuxf.net

课程介绍 程序=数据结构+算法 计算机的基本任务是对数据的处理,而数据又分为数值数据和非数值数据,目 前世界上超过90%的数据处理都是对非数值数据的处理,数据结构就是研究非数 值数据之间的结构关系,以及表示方法、存储方法和处理方法。 知识基础:C语言程序设计(或者其他高级语言,如pascal、basic、java、 c++、c#、JS、Python、swift……)、面向对象程序设计、数据库 后继课程:计算方法、Visual C++(或其他工程应用开发方法学习,如 JavaWeb、.Net、Delphi、Android、IOS等开发工具的课程) 课时:每周4节课,共12周 评分标准:平时成绩20%(考勤、课堂表现)、作业表现30%、期末成绩50% 教程:数据结构(c语言版)-严蔚敏、吴伟民,清华大学出版社 课程公告、课件下载、作业发布、提交:tuxf.net

教学内容 第一章 绪论 第二章 线性表 第三章 栈和队列 第四章 串 第五章 数组和广义表 第六章 树和二叉树 第七章 图 第一章 绪论 第二章 线性表 第三章 栈和队列 第四章 串 第五章 数组和广义表 第六章 树和二叉树 第七章 图 第八章 动态存储管理 第九章 查找 第十章 内部排序 第十一章 外部排序 第十二章 文件

第六章 树和二叉树 主要内容: 6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林 第六章 树和二叉树 主要内容: 6.1 树的定义和基本术语 6.2 二叉树 6.2.1 二叉树的定义 6.2.2 二叉树的性质 6.2.3 二叉树的存储结构 6.3 遍历二叉树和线索二叉树 6.3.1 遍历二叉树 6.3.2 线索二叉树 6.4 树和森林 6.4.1 树的存储结构 6.4.2 森林与二叉树的转换 6.4.3 树和森林的遍历 6.5 树与等价问题 6.6 赫夫曼树及其应用 6.6.1 最优二叉树 6.6.2 赫夫曼编码

重点回顾: 1、树的定义 2、二叉树的定义 3、Microsoft Visual Studio 4、递归

重点回顾——1、树的定义 树形结构是一类重要的非线性结构。树形结构是结点之间有分支,并具有 层次关系的结构。它非常类似于自然界中的树。     树结构在客观世界中是大量存在的,例如家谱、行政组织机构都可用树形 象地表示。     树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源 程序的语法结构;在数据库系统中,可用树来组织信息;在分析算法的行为 时,可用树来描述其执行过程。

重点回顾——2、二叉树的定义—1 二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往 是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的 存储结构及其算法都较为简单,因此二叉树显得特别重要。 说明 1)二叉树中每个结点最多有两颗子树;二叉树每个结点度小于等于2; 2)左、右子树不能颠倒——有序树; 3)二叉树是递归结构,在二叉树的定义中又用到了二叉树的概念; A F G E D C B

重点回顾——2、二叉树的定义—2 二叉树的顺序存储结构 1、用一维数组bt[ ]存放一棵完全二叉树 2、将标号为 i 的结点的数据元素存放在分量 bt[i-1]中 3、存储位置隐含了树中的关系,树中的关系是通过完全二叉树的性质实现的。例如,bt[5](i=6)的双亲结点标号是k=trunc(i/2)=3,双亲结点所对应的数组分量bt[k-1]=bt[2] A 1 A C C B 2 B 3 F 4 F D E D 5 E 6 7 10 G 8 9 G 0 1 2 3 4 5 6 7 8 9 10 m-1 A B C D E 0 F 0 0 G

重点回顾——2、二叉树的定义—3 二叉链表 A B ∧ ∧ D C ∧ ∧E ∧ ∧F ∧ 二叉链表中每个结点包含三个域: 1、数据域 2、左指针域 3、右指针域 Struct node { int data; struct node *lch,*rch; };

重点回顾——3、Visual Studio

重点回顾——4、递归

本节课内容

6.3.1 遍历二叉树 主要内容: 重点、难点 遍历的基本概念 各种遍历方法的思想 各种遍历方法的递归算法和非递归算法 6.3.1 遍历二叉树 主要内容: 遍历的基本概念 各种遍历方法的思想 各种遍历方法的递归算法和非递归算法 以先序输入方式建立二叉树的算法。 重点、难点 各种遍历方法的非递归算法

一. 遍历的基本概念 遍历是各种数据结构最基本的操作,许多其他的操作 可以在遍历基础上实现。 一. 遍历的基本概念 遍历是各种数据结构最基本的操作,许多其他的操作 可以在遍历基础上实现。 二叉树的遍历:沿某条路径周游二叉树,对树中的每 个结点访问一次且仅访问一次。 “访问”的含义很广,可以是对结点的各种处理,如修改结点数据、输出结点 数据。

两种基本策略: 广度遍历 深度遍历 如何访问二叉树的每个结点, 而且每个结点仅被访问一次? ? A F E D C B

广度遍历策略 遍历结果:A B C D E F 层次遍历方法:从上到下、从左到右访问各结点 1 2 3 4 5 6 7 8 A B C D 适用于顺序存储结构 存储结构 A F E D C B 1 2 3 4 5 6 7 8 A B C D φ E F 遍历结果:A B C D E F

深度遍历策略 二叉树由根、左子树、右子 树三部分组成 二叉树的遍历可以分解为: B 有六种遍历方法: F D G A 访问根(D) C E D C B 二叉树由根、左子树、右子 树三部分组成 二叉树的遍历可以分解为: 访问根(D) 遍历左子树(L) 遍历右子树(R) 有六种遍历方法: D L R,L D R,R D L , D R L, L R D ,R L D 约定先左后右,有三种遍历方 法,分别称为先序遍历、中序 遍历、后序遍历

二、各种遍历的思想 1 . 先序遍历(DLR) 2 . 中序遍历(LDR) 3. 后序遍历(RDL)

1 . 先序遍历(DLR) B F G D H K A 例:先序遍历右图所示的二叉树,所得先序遍历序列: E 若二叉树非空,则依次进行以下操作 (1)访问根结点; (2)先序遍历左子树; (3)先序遍历右子树; A 例:先序遍历右图所示的二叉树,所得先序遍历序列: A, B, C, D, E, F, G, H, K E B F C G D Flash演示 H K

2. 中序遍历(LDR) B 例:中序遍历右图所示的二叉树,所得中序遍历序列: F B, D, C, A, E, H, G, K, F G 若二叉树非空,则依次进行以下操作 (1)中序遍历左子树; (2)访问根结点; (3)中序遍历右子树; A F H E D C B G K 例:中序遍历右图所示的二叉树,所得中序遍历序列: B, D, C, A, E, H, G, K, F Flash演示

3. 后序遍历(LRD) B F 例:后序遍历右图所示的二叉树,所得后序遍历序列: D, C, B, H, K, G, F, E, A G 若二叉树非空,则依次进行以下操作 (1)后序遍历左子树; (2)后序遍历右子树; (3)访问根结点; A F H E D C B G K 例:后序遍历右图所示的二叉树,所得后序遍历序列: D, C, B, H, K, G, F, E, A Flash演示

软件水平考试有关试题 2015年试题 2004年试题 2002年试题 1999年试题

2015年 试题 对于非空的二叉树,设D代表根结点,L代表根结点的左子树R代表根结 点的右子树。若对下图所示的二叉树进行遍历后的结点序列为7 6 5 4 3 2 1,则遍历方式是(59)。  A)LRD B)DRL C)RLD D)RDL

2002年 试题 假设一棵二叉树的后序遍历序列为 D G J H E B I F C A,中序遍历序列为 D B G E H J A C I F,则其前序遍历序列 为 。 A)A B C D E F G H I J B)A B D E G H J C F I C)A B D E G H J F I C D)A B D E G J H C F I A B D E G H J C F I

1999试题2 二叉树的查找有深度优先和广度优先二类,深度优先包括 _C_。当一棵二叉树的前序序列和中序序列分别是 H G E D B F C A 和 E G B D H F A C时,其后序序列 必是_D_,层次序列为_E_. C: (1)前序遍历 后序遍历 中序遍历 (2)前序遍历 后序遍历 层次遍历 (3)前序遍历 中序遍历 层次遍历 (4)中序遍历 后序遍历 层次遍历 D: (1) B D E A G F H C (2) E B D G A C F H (3) H G F E D C B A (4) H F G D E A B C H G E D B F C A E: (1) B D E A C G F H (2) E B D G A C F H (3) H G F E D C B A (4) H F G C D E A B

软件设计师 2004上半年 设结点x和y是二叉树中任意的两个结点,在该二叉树的先根遍历序列中x在y 之前,而在其后根遍历序列中x在y之后,则x和y的关系是__(10)__。 A.x是y的左兄弟 B.x是y的右兄弟 C.x是y的祖先 D.x是y的后裔

三、遍历的递归算法 void preorder(btree *t) { if (t) { putchar(t->data); 前序遍历(DLR) void preorder(btree *t) { if (t) { 若二叉树t非空,则: putchar(t->data); 访问根结点t preorder(t->lchild); 前序遍历t的左子树 前序遍历t的右子树 preorder(t->rchild); }

中序遍历、后序遍历的递归算法 后序遍历 中序遍历 void postorder(bitree *t) { if ( t ) { postorder(t->lchild); postorder(t->rchild); putchar(t->data); } 中序遍历 void inorder(bitree *t) { if ( t ) { inorder(t->lchild); putchar(t->data); inorder(t->rchild); } 你能写出后序遍历递归算法了吧

思考: 1、树的应用场景、应用方式 2、算法复杂度

拓展阅读: 红黑树、B+树 挑战:红黑树的构造、遍历、插入、删除(可选作业,可加分 )

下一节课的准备 完成作业、拓展阅读 尽力实现挑战作业 预习线索二叉树、树、森林概念

作业: 二叉树中序遍历 设计一个包含各种情况的二叉树 输入:字符模式下,中序输入二叉树 处理:存入数据库 输出:按后序遍历方法输出所有节点内容 作业形式:Word,包含设计图、源代码、注释、调试截图 提交:电子邮件,7633927@qq.com 截止时间:下次上课前一天晚上八点以前 注意事项:邮件主题格式——班级_姓名_数据结构_第5次作业

FAQ 考试时间:下个月底 考试形式:笔试+课程设计 拓展阅读:《数据结构C++语言描述》、《计算方法》 下一阶段的学习目标:IDE、Windows程序设计、Web程序设计、数据库高 级应用、网络编程

Thanks!