- 1、本文档共98页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 练习 8 分别描述满足下面条件的二叉树的特征: (1)先序序列和中序序列相同。 (2)先序序列和后序序列相反。 9 证明:由二叉树的先序序列和中序序列能唯一确定一棵二叉树,并分别由下面的两个序列构造出相应的二叉树: ①先序:ABCDEFGHI ②先序:ABCDEFGHIJ 中序:ADECFBGIH 中序:BDECAGIJHF 10 证明:由二叉树的后序序列和中序序列能唯一确定一棵二叉树,并分别由下面的两个序列构造出相应的二叉树: ①后序:DCFEBIHGA ②后序:DECBGIHFA 中序:DCBFEAGHI 中序:DCEBAFHGI * 练习 11 设计算法以实现将以二叉链表形式存储的树(森林)转换为对应的双亲表示形式。 12 已知树(森林)的高度为4,所对应的二叉树的先序序列为ABCDE,请构造出所有满足这一条件的树或森林。 13 设计算法将一个以孩子链表形式表示的森林转换为二叉链表形式。 14 设计算法按先序次序输出森林中每个结点的值及其对应的层次数。 15 设计算法以求解森林的高度。 16 设计算法以输出森林中的所有叶子结点的值。 17 设计算法逐层输出森林中的所有结点的值。 * 第七章 树和二叉树 内容回顾 树的相关概念和术语 二叉树的定义、性质和存储结构 二叉树的遍历及其应用 线索二叉树 树和森林 哈夫曼树(Huffman) * * 7.4 线索二叉树 5. 二叉树的线索化 基本框架 ——在遍历过程中实现对每个结点的线索化 每访问一个结点,如何线索化? P后继 P前驱 T P ——P的前驱线索化 T-lchild = pre; T-ltag = 1; ——P的后继线索化 前驱结点的后继线索化; 当前结点的前驱线索化; 判断当前结点是否需要后继线索化 * 7.4 线索二叉树 5. 二叉树的线索化算法实现 ——先序线索化为例 void prethread( bnode * t, bnode * pre){ if ( t != NULL ){ if (( pre != NULL ) ( pre-rtag==1)) pre-rchild=t; if ( t-lchild == NULL ) { t-lchild = pre; t-ltag=1;} else t-ltag=0; if ( t-rchild == NULL ) t-rtag=1; else t-rtag=0; pre = t; if ( t-ltag==0) prethread( t-lchild, pre); // 需要对pre进行更新吧? if ( t-rtag==0) prethread( t-rchild, pre); } }(看下课本上怎么写的?) 前驱结点的后继线索化; 当前结点的前驱线索化; 判断当前结点是否需要后继线索化 * 7.5 树和森林 7.5.1树/森林的存储结构 1. 双亲表示法 存储每个结点的双亲结点的位置信息。 例如: 优点:简洁, 形式一致; 搜索父结点、祖先容易 缺点:搜索孩子结点费时; 插入删除时需注意维护关系 A -1 B 0 C 0 D 0 E 1 F 1 G 2 H 3 I 3 J 3 K 4 A B C G F E H I J K D data parents 0 1 2 3 4 5 6 7 8 9 10 * 7.5 树和森林 2. 孩子链表表示法 存储每个结点的孩子信息,因而是链表形式。 优点:找孩子结点/后代容易 缺点:重复 结构不一致 B C D ^ E F ^ G ^ K ^ H I J ^ A B C G F E H I J K D A B C D E F ^ G ^ H ^ I ^ J ^ K ^ data children_link 0 1 2 3 4 5 6 7 8 9 10 * 7.5 树和森林 3. 孩子兄弟链表表示法 表示方
文档评论(0)