PowerPoint Presentation

Similar documents
PowerPoint Presentation

PowerPoint 演示文稿

2.3 链表

PowerPoint 演示文稿

8

树的非递归中序和层次遍历实现

幻灯片 1

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

PowerPoint 演示文稿

PowerPoint Presentation

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

PowerPoint Presentation

运用伸展树解决数列维护问题

<4D F736F F F696E74202D20536C FB5DACBC4D5C220CAF7D3EBB6FEB2E6CAF7205BBCE6C8DDC4A3CABD5D>

生成word文档

Microsoft PowerPoint - Lecture9.ppt

试卷代号 : 座位号 中央广播电视大学 学年度第二学期 " 开放本科 " 期末考试 数据结构试题 2012 年 7 月 题号一四五总分一一 分数 得分 评卷人 - 单项选择题, 在括号内填写所选择的标号 { 每小题 2 分, 共 1 8 分 ) 1. 下面算法

试卷代号 : 座位号 I II 中央广播电视大学 学年度第二学期 " 开放本科 " 期末考试 数据结构试题 2011 年 7 月! 题号 I - I 二 三 四! 五! 六 总分 分数 I I I 1 1- I ---1 I 得分 评卷人 一 单项选择

数据结构

Microsoft PowerPoint - 6-.pptx

Two Mergeable Data Structures

204 */ InitiateStack s ; /* s */ i = n; t = p = new node; /* */ p->data = postorder[i]; while i > q = new node; if parent[i - ] == postorder[i] S,T S

数据结构

7

PowerPoint 演示文稿

6 tree

Microsoft PowerPoint - 06.ppt

第六章 树

2018 年天津城建大学攻读硕士学位研究生入学考试试题 (A) 卷 考试科目代码 :825 考试科目名称工程信息技术 招生专业 : 建筑与土木工程

生成word文档

PowerPoint Presentation

新・解きながら学ぶJava

PowerPoint 演示文稿

6.1 树的定义和基本术语 6.2 二叉树 ( 定义 性质 存储结构 ) 6.3 遍历二叉树和线索二叉树 6.4 树和森林 6.5 赫夫曼树及其应用

PowerPoint Presentation

新版 明解C++入門編

untitled

ebook39-5

<4D F736F F D B8BDBCFE4220D7A8D2B5BBF9B4A1D3EBBACBD0C4BFCEB3CCC3E8CAF62E646F6378>

四 读算法 ( 每题 7 分, 共 14 分 ) 1. (1) 查询链表的尾结点 (2) 将第一个结点链接到链表的尾部, 作为新的尾结点 (3) 返回的线性表为 (a 2,a 3,,a n,a 1 ) 2. 递归地后序遍历链式存储的二叉树 五 法填空 ( 每空 2 分, 共 8 分 ) true B

试卷代号 : 座位号 CD 中央广播电视大学 学年度第二学期 " 开放本科 " 期末考试 数据结构 ( 本 ) 试题 I 题号 - - I 二 l 三 l 四 l 总 分 分数 I I I I I I 2009 年 7 月 得分 评卷人 I I I 一

本 刊 特 稿 CHILDREN STUDY 各 种 声 音 拟 音 词 的 使 用, 会 使 诗 歌 的 语 言 更 为 生 动 形 象, 音 调 悦 耳, 对 童 诗 自 然 非 常 合 适 将 大 自 然 的 声 音 用 拟 音 词 表 达, 并 且 呈 现 在 诗 中, 是 童 诗 之 所

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1

chap07.key

PowerPoint Presentation

华侨大学 2014 年硕士研究生入学考试专业课试卷 B ( 答案必须写在答题纸上 ) 招生专业 计算机技术 科目名称 数据结构与 C++ 科目代码 850 第一部分 C++ ( 总分 75 分 ) 一 单项选择题 (18 分, 每小题 2 分 ) 1. 若有定义 :int a[3][4];, 则表达

湖北工业大学二 八年招收硕士学位研究生试卷 则从顶点 A 出发进行深度优先遍历可以得到的序列是 : A.ACEDBFG B.ACDGFBE C.AECDBGF D.ABDGFEC 9 在对 n 个元素的序列进行排序时, 堆排序所需要的附加存储空间是 ( ) A. O(log 2 n) B. O(1)

Microsoft PowerPoint - DS_Ch6.ppt [兼容模式]

PowerPoint 演示文稿

Applications: Haffman Tree 叶结点权值集合为 W={1,3,5,7} 的哈夫曼树的构造过程 可以计算出其带权路径长度为 29, 由此可见, 对于同一组给定叶结点所构造的哈夫曼树, 树的形状可能不同, 但带权路径长度值是相同的, 一定是最小的 第一步 第二步

重 庆 邮 电 大 学

PowerPoint Presentation

ebook14-4

untitled

什么是函数式编程?

四 课程与专业毕业要求的关联性 ( 必填项 ) 专业毕业要求 LO11: 能领会用户诉求 目标任务, 正确表达自己的观点, 具有专业文档的撰写能力 LO21: 能根据环境需要确定自己的学习目标, 并主动地通过搜集信息 分析信息 讨论 实践 质疑 创造等方法来实现学习目标 LO31: 工程素养 : 掌

试卷代号 : 座位号 中央广播电视大学 学年度第一学期 " 开放本科 " 期末考试 数据结构试题 2011 年 1 月 题号一四五总分一一 分数 得分 评卷人 一 单项选择题, 在括号内填写所选择的标号 ( 每小题 2 分, 共 1 8 分 ) 1. 执行下

第七章数组 掌握一维数组的定义 初始化及元素引用 ; 掌握二维数组的定义 初始化及元素引用 ; 掌握字符数组的定义及使用 ; 4. 了解字符串处理函数 ; 第八章函数 掌握函数的定义与调用 ; 掌握函数调用时的实参与形参的结合 ; 理解函数原型声明与函数在源程序中的相对位置的关系 ; 理解函数的嵌套

FY.DOC

二级公共基础知识总结

法 2: 不画图也能快速得出后序序列, 只要找到根的位置特征 由前序先确定 root, 由中序先确定左子树 例如, 前序遍历 BEFCGDH 中, 根结点在最前面, 是 B; 则后序遍历中 B 一定在最后面 法 3: 递归计算 如 B 在前序序列中第一, 中序中在中间 ( 可知左右子树上有哪些元素

【此处填写课程中文名称】

Microsoft Word - 专升本练习2:线性表.doc

Microsoft PowerPoint - string_kruse [兼容模式]

Microsoft Word - 01.DOC

szj1.s92

A.39 B.52 C.111 D.119 解析 C 根据完全二叉树的定义, 此树的前 6 层应该是满二叉树, 共有 = 63 个结点 第 6 层有 8 个叶子结点, 说明另外 32-8=24 个结点不是叶子结点, 最多各有 2 个孩子结点 而该树不可能有第 8 层存在, 所以结点总数最

书名 : 作 者 : 出版社 : 出版 :

书名 : 作 者 : 出版社 : 出版 :

书名 : 作 者 : 出版社 : 出版 :

提问袁小兵:

大侠素材铺

数据结构导论

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

数据结构习题

<4D F736F F D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

第九章

C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 3 日 1

华侨大学2011年硕士研究生入学考试专业课试卷

D2 17/10 食 完 早 餐 去 中 山 陵 和 明 孝 陵, 灵 谷 寺 到 景 区 的 巴 士 : 游 1 游 2 游 路 ( 票 价 在 1-2 元 间 ) 三 个 地 点 中 间 凭 门 票 免 费 乘 坐 景 区 小 火 车 往 来 晚 上 有 力 气 的 话 去 夫 子

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

<4D F736F F F696E74202D20CAFDBEDDBDE1B9B9B8B4CFB0CCE22E707074>

<4D F736F F D20BBAAC4CFC0EDB9A4B4F3D1A72020CAFDBEDDBDE1B9B9B8B4CFB0B1CABCC7D5FBC0ED2E646F63>

PowerPoint 演示文稿

无类继承.key

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

计程序的基础机器语言汇编语言高级语言结构化程序设计语言面向对象程序设计语言可视化程序设计语言人工智能程序设计语言 5.1 程序设计语言 学习语言是设

2009

一元多项式实验要求

Guava学习之CharSequenceReader

一、单项选择题, 共十五小题,每小题2分,全题总分为30分

6

C++ 程序设计 OJ4 - 参考答案 MASTER 2017 年 5 月 21 日 1

章名 (第1章)

C/C++ - 函数

Microsoft Word - 专升本练习5:图.doc

数 6-树.ppt

Open topic Bellman-Ford算法与负环

基于ECO的UML模型驱动的数据库应用开发1.doc

Microsoft PowerPoint - Chapter7.ppt

Transcription:

数据结构与算法 ( 六 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社,2008. 6 ( 十一五 国家级规划教材 ) http://www.jpk.pku.edu.cn/pkujpk/course/sjjg

第 6 章树 C 树的定义和基本术语 树的链式存储结构 子结点表 表示方法 静态 左孩子 / 右兄弟 表示法 动态表示法 动态 左孩子 / 右兄弟 表示法 父指针表示法及其在并查集中的应用 I J H 树的顺序存储结构 K 叉树 2

子结点表 表示方法 list of children, 就是图的邻接表 索引值父结点 子结点 0 1 2 1 0 3 4 2 C 0 6 7 3 1 8 9 4 1 5 2 6 2 10 11 7 H 2 8 I 3 9 J 3 10 K 6 11 L 6 5 3

静态 左孩子 / 右兄弟 表示法 在数组中存储的 子结点表 C H J I 左子结点 父值结点 0 C 0 0 2 2 H 6 I 6 J 7 右兄弟结点 4

动态表示法 每个结点分配可变的存储空间 子结点数目发生变化, 需要重新分配存储空间 2 C 2 C 3 H 2 0 0 2 H 0 I J K L (a) 树 I 0 J 0 K (b) 树的实现 0 L 0 5

动态 左子 / 右兄 二叉链表示法 左孩子在树中是结点的最左子结点, 右子结点是结点原来的右侧兄弟结点 根的右链就是森林中每棵树的根结点 pchild info psibling C C K H K H J J 6

动态二叉链表树的关键实现细节 // 在 TreeNode 的抽象类中增加以下私有数据成员 private: T m_value; // 树结点的值 TreeNode<T> *pchild; // 第一个左孩子指针 TreeNode<T> *psibling; // 右兄弟指针 7

寻找当前结点的父结点 template<class T> TreeNode<T>* Tree<T>::Parent(TreeNode<T> *current) { using std::queue; // 使用 STL 队列 queue<treenode<t>*> aqueue; TreeNode<T> *pointer = root; TreeNode<T> *father = upperlevelpointer = NULL; // 记录父结点 if (current!= NULL && pointer!= current) { while (pointer!= NULL) { // 森林中所有根结点进队列 if (current == pointer) // 森林中所有第一层根的父为空 break; aqueue.push(pointer); // 当前结点进队列 pointer=pointer-> RightSibling(); // 指针指向右 8

寻找当前结点的父结点 while (!aqueue.empty()) { C pointer = aqueue.front(); // 取队列首结点指针 aqueue.pop(); // 当前元素出队列 K H upperlevelpointer = pointer; // 指向上一层的结点 pointer = pointer-> LeftMostChild(); // 指向最左孩子 while (pointer) { // 当前结点的子结点进队列 J if (current == pointer) { father = upperlevelpointer; // 返回父 break; else { aqueue.push(pointer); pointer = pointer->rightsibling(); aqueue. clear( ); // 清空队列, 也可以不写 ( 局部变量 ) return father; 9 X W Y

template <class T> void Tree<T>::estroyNodes(TreeNode<T>* root) { 删除以 root 为代表的森林的所有结点 if (root) { estroynodes(root->leftmostchild());// 递归删除第一子树 estroynodes(root->rightsibling()); // 递归删除其他子树 delete root; // 删除根结点 10

删除以 subroot 为根的子树 template<class T> void Tree<T>::eleteSubTree(TreeNode<T> *subroot) { if (subroot == NULL) return;// 若待删除的子树为空则返回 TreeNode<T> *pointer = Parent (subroot); // 找 subroot 的父结点 if (pointer == NULL) {// subroot 没有父, 则是某个树根 pointer = root; while (pointer->rightsibling()!= subroot)// 顺右链找左邻树根 pointer = pointer->rightsibling(); pointer->setsibling(subroot->rightsibling()); // 前后挂接, 脱链 else if (pointer->leftmostchild() == subroot) // subroot 为最左子 pointer->setchild(subroot->rightsibling()); // 挂新的最左 else {// subroot 有左兄弟的情况 pointer = pointer->leftmostchild(); // 下降到最左兄弟 while (pointer->rightsibling()!= subroot)// 顺右链找左邻兄弟 pointer = pointer->rightsibling(); pointer->setsibling(subroot->rightsibling()); // 前后挂接, 脱链 subroot->setsibling(null);// 非常重要, 丢了会出错 estroynodes(subroot); // 删除以 subroot 代表的子森林的所有结点 11

思考 : 下面的算法是否能遍历森林? template <class T> void Traverse(TreeNode <T> * rt) { if (rt==null) return; C Visit(rt); TreeNode * temp = rt-> LeftMostChild(); while (temp!= NULL) { Traverse(temp); temp = temp->rightsibling(); K J I X L N M L 12

思考 : 灵活应用遍历框架 例 : 森林镜面映射 13

映射后 14

思考 : 删除以 subroot 为根的子树 请注意待删除的子树是否为空 subroot 有无父指针等情况的判断 考虑删除以后各项相关链接的修改顺序 15

数据结构与算法 谢谢聆听 国家精品课 数据结构与算法 http://www.jpk.pku.edu.cn/pkujpk/course/sjjg/ 张铭, 王腾蛟, 赵海燕高等教育出版社,2008. 6 十一五 国家级规划教材