C++编程《第20课 综合训练2》教学设计.docxVIP

  • 1
  • 0
  • 约6.67千字
  • 约 11页
  • 2026-03-13 发布于广西
  • 举报

C++编程《第20课 综合训练2》教学设计.docx

PAGE

PAGE1

综合训练(2)

教学目标

1.知识与技能

练习树、图、哈希表等数据结构的应用

初步接触图的最短路径算法

积累解题经验,提高综合运用多种算法和数据结构的能力

2.过程与方法:

学习流程:讲授——模仿——练习

通过课堂练习,巩固课堂内容。

教学重点、难点

【重点】

树的深度优先遍历

遍历序列的哈希

图的广度优先搜索最短路径

【难点】

根据实际情况进行灵活的dfs遍历算法编写

图的最短路径的bfs搜索方法。

课时安排

课时安排:120分钟

四、上课准备

课程相关ppt、白板、白板笔、积分卡

课前检查电脑、投影仪、网络是否有故障,及时修复。

五、教学活动

活动时长

教学活动

注意事项

课前准备

老师准备学生电脑,保证电脑能正常使用;打开投影仪,打开上课课件,以最饱满的热情迎接学生!

提前10分钟准备

开场白

欢迎各位同学回到信息学课堂。

引入

有了数据结构的基础知识,我们可以对一些涉及到数据结构的题目进行解答。有的问题我们没有接触过,会觉得问题很难,但有经验后就会形成自己的一套方法。前人采用过的方法我们要学,但更重要的是构造自己的算法,增强算法创新能力。有的问题看起来需要用到一些程序化的、前人已发表的成熟算法来解决,实际上可能用很基础的概念也能解决、或者理解。

学习内容(1)

(一)对称二叉树(NOIP2018)

【题目描述】

一棵有点权的有根树如果满足以下条件,则被称为二叉树:

1.是二叉树;

2.将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等。

下图中节点内的数字为权值,节点外的id表示节点编号。

题目描述的对称也可以这样描述:等同于几何图形的对称,如果一颗二叉树根结点的左子树的镜像正好与右子树相同,那么这个二叉树是对称的。这种描述符合人类的普通语言,但包含的细节信息没有严谨的数学语言这么丰富,题目描述还指出了这种“对称”的递归性质:所有结点的左右子树都是对称的,这个对称只关乎权值和结构,不考虑结点编号。

ppt5-6:输入输出格式和输入输出样例

结合样例说明输入输出格式。

对于样例输入1,对称的子树只有1个结点的子树才符合要求。

对于样例输入2,我们要区分一个概念:树的一部分不能称为子树。子树的概念和树的概念都是递归的,所以子树必须从根结点开始,一直包括所有的子孙结点。

如图所示:

id=7为根的子树包含3个结点,id=8的子树包含4个结点。虽然id=8的子树的一部分是对称的,但这不是子树。如果这也算子树的话,那么id=10的结点岂不是包含的对称子树更大?然而事实上id=10的结点为根的子树不是对称的,因为这棵子树必须包含id=2的结点,结构不对称。

ppt7-8:

根据题目的描述,我们很容易找到朴素的解题方案:

【分析】

(1)按照题目的描述,对称二叉树的左右子树对换后,树不变。这意味着这棵树左子树=右子树,那么如果中序遍历这棵树,递归访问左-中-右和递归访问右-中-左是一样的。所以我们比较两种中序遍历的权值序列,是判断对称的必要条件。

2)仔细观察题目的测试点。其中一部分测试点的权值全部是1.这就意味着无论如何遍历,权值都是1,那么前序、中序、后序,无论如何遍历,只要结点总数不变,那么权值的序列全部是11111。这样如何的序列是无法分辨其结构之差异的。如何解决呢?

解决方案:破坏权值一样时的无差异性。

如图所示的二叉树,按照左-中-右的顺序遍历,并且给左子树前面加一个‘-’号,结果是:

-(-11)1(-11)=--111-11

按照右-中-左顺序遍历,并且给右子树前加‘-’号,结果是:

-(11)1(11)=-11111

两次遍历是明显不一样的。但如果这棵树是对称的,情况又如何呢?

如图,对称的情况下,以添加‘-’号的做法,两次遍历的结果分别为:

-左中右:-(-11)1(11)=--11111

-右中左:-(-11)1(11)=--11111

显然,在对称的时候,我们的处理后仍然是两种遍历一致。

对于遍历序列,如果直接存储下来以后再进行对比,由于序列长度很长,所以要消耗很大的内存和时间,那么我们可以考虑采用哈希的思想:计算出哈希值,当哈希值一样的时候,我们认为遍历得到的结果一样。

对于此二叉树的权值遍历序列,我们简单地采用遍历到的

(当前权值连接新遍历到的权值形成的大整数)%(一个较大的质数)的方式来计算哈希值。

对于此二叉树的权值遍历序列,我们简单地采用遍历到的

(当前权值(连接)新遍历到的权值形成数字)%(一个较大的质数)的方式来计算哈希值。如112连接333得到112333。

那么,同学们肯定会问:这种方式如果产生了哈希冲突不就不能分辨序列的区别了么?

的确如此,但如果我们对多个质数取模,多个值同时相等时,我们才认

文档评论(0)

1亿VIP精品文档

相关文档