数据结构 第06章 树与二叉树.ppt

  1. 1、本文档共120页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构 第06章 树与二叉树

讨论:不是完全二叉树怎么办? 对遍历的分析: 对遍历的分析: 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--P.134算法6.6 char ch; scanf(“%c”, ch); if (ch== ) T = NULL; else { if (!(T = new BiTNode)) { printf(“分配失败”);return ERROR ;} 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)) return ERROR; ④ 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

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档