- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构(C/C描述)第6章树与二叉树
讨论:不是完全二叉树怎么办? 对遍历的分析: 对遍历的分析: 2、建立二叉树的存储结构 不同的定义方法相应有不同的存储结构的建立算法 6.3.2线索化二叉树 规 定: 有关线索二叉树的几个术语: 例2:画出以下二叉树对应的中序线索二叉树。 树转二叉树举例: 讨论2:二叉树怎样还原为树? 森林转二叉树举例:(法2) 讨论4:二叉树如何还原为森林? 6.5 哈夫曼树及应用 哈夫曼树 哈夫曼树的应用 哈夫曼算法的实现 a b e i d f h g c 要点:把所有右孩子变为兄弟!然后逆时针旋转45度。 a b e i d f h g c 法1: ① 各森林先各自转为二叉树; ② 依次连到前一个二叉树的右子树上。 讨论3:森林如何转为二叉树? 法2: 森林直接变兄弟,再转为二叉树 即F={T1, T2, …,Tm} B={root, LB, RB} A B C D E F G H J I A B C D E F G H J I A B C D E F G H J I 兄弟相连 长兄为父 孩子靠左 头根为根 A 要点:把最右边的子树变为森林, 其余右子树变为兄弟 A B C D E F G H J I A B C D E F G H J I E F A B C D G H J I 即B={root, LB, RB} F={T1, T2, …,Tm} 1、统计二叉树中叶子结点的个数 算法基本思想: 先序(或中序或后序)遍历二叉树,在遍历过程中查找叶子结点,并计数。 由此,需在遍历算法中增添一个“计数”的参数,并将算法中“访问结点” 的操作改为:若是叶子,则计数器增1。 void CountLeaf (BiTree T, int count) { //先序遍历二叉树,计算叶子结点个数 if ( T ) { if ((!T-lchild) (!T-rchild)) count++; // 对叶子结点计数 CountLeaf( T-lchild, count); CountLeaf( T-rchild, count); } // if } // CountLeaf 以字符串的形式 “根 左子树 右子树” 定义一棵二叉树 例如: 以空白字符“ ”表示 A B C D A B C D 空树 只含一个根结点的二叉树 A 以字符串“A ”表示 以下列字符串表示 int CreateBiTree(BiTree T) { // 按先序序列构造二叉链表表示的二叉树 T scanf(ch); if (ch== ) T = NULL; else { if (!(T = new BiTNode)) exit(OVERFLOW); T-data = ch; // 生成根结点 CreateBiTree(T-lchild); // 构造左子树 CreateBiTree(T-rchild); // 构造右子树 } return OK; // 递归出口 } // CreateBiTree A B C D A B C D 上页算法执行过程举例如下: A T B C D ^ ^ ^ ^ ^ ① scanf(ch); ② if (ch== ) T = NULL; else { ③ if (!(T = new BiTNode)) exit(OVERFLOW); ④ T-data = ch; ⑤ CreateBiTree(T-lchild); CreateBiTree(T-rchild);} return ok // 递归出口 仅知二叉树的先序序列“abcdefg” 不能唯一确定一棵二叉树, 由二叉树的先序和中序序列建树 如果同时已知二叉树的中序序列“cbdaegf”,则会如何? 二叉树的先序序列 二叉树的中序序列 左子树 左子树 右子树 右子树 根 根 a b c d e f g c b d a e g f 例如: a a b b c c d d e e f f g g a b c d e f g ^ ^ ^ ^ ^ ^ ^ ^ 先序序列中序序列 一、何谓线索二叉树? 遍历二叉树的结果是, 求得结点的一个线性序列。 A B C
您可能关注的文档
最近下载
- 康悦百万医疗保险C款介绍.pptx VIP
- 中国人寿.北京大学-中高净值家庭资产配置和保险保障白皮书.pdf
- Unit 2 Different families Part A Let’s learn & Listen and do(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册.docx
- 4D打印的应用、原理及发展前景.ppt VIP
- 22J403-1 楼梯 栏杆 栏板(一) (3).pdf VIP
- 青岛版(五四制)(2024)小学科学三年级上册《制作“冰琥珀”》教案.docx VIP
- 超低能耗建筑的增量成本与经济效益分析.pdf VIP
- 贵州省房屋建筑和市政工程标准施工招标文件(2021年版)【模板】.docx VIP
- 跨文化交际:中英文化对比 (13).ppt VIP
- 17J008 挡土墙(重力式、衡重式、悬臂式)(最新).pdf VIP
文档评论(0)