- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 树和二叉树 6.1 树的类型定义 树(Tree)是n(n≥0)个结点的有限集。 在任意一棵非空树当中: (1)有且仅有一个特定的结点称为根结点(Root) (2)当n〉1时,其余结点可分为m(m〉0)个互不相交的有限集T1T2…Tm,其中每一个集合本身又是一棵树,并且称为根的子树(sub tree) Pop(s,p); if(!visit(p-lchild) ) Return ERROR; Push(S,P-rchild); }//if}//whileReturn ok;}//InorderTraverse 层次遍历右图的遍历序列为:ABCDTFGHIJ 在遍历开始时,首先把根节点放入队列;然后每次从队列中取出队头元素进行处理,每处理一个结点时,按从左到右的顺序把它的所有子结点放入队列。这样,上层结点总是排在下一层结点的前面,从而实现了二叉树的广度优先遍历。 本章小结 1.树的概念 2.二叉树的特性和基本概念存储与遍历 3.树和森林的存储遍历以及如何转换为二叉树 4.最优二叉树即赫夫曼树以及赫夫曼编码 课后练习 1.已知某二叉树的三种遍历中的任意两种遍历序列(如先序遍历和中序遍历或先序遍历和后序遍历等)是否能够唯一确定一棵二叉树?为什么? 2.能够将给出的任意一棵树转换为二叉树 3.赫夫曼编码 6.6.4 森林和二叉树的转换 假设森林 F = {T1,T2, …,Tn }, 其中第一棵树T1由根结点 ROOT(T1) 和子树森林 {T11?, T12?, …, T1m?} 构成。 可按如下规则转换成一棵二叉树 B =( LBT, Node(root), RBT ): 若森林 F 为空集,则二叉树 B 为空树; 否则, 由森林中第一棵树的根结点 ROOT(T1 ?) 复制得二叉树的根 Node(root),由森林中第一棵树的子树森林 {T11?, T12?, …, T1m?} 转换得到二叉树中的左子树LBT,由森林中删去第一棵树之后由其余树构成的森林 {T2,T3, …,Tn } 转换得到二叉树中的右子树RBT。 反之,对于任意一棵二叉树 B =( LBT, Node(root), RBT ), 可按如下规则转换得到由n 棵树构成的森林 F = { T1,T2 , …, Tn } 若二叉树 B 为空树, 则与其对应的森林 F 为空集; 否则,由二叉树的根结点 Node(root) 复制得森林中第一棵树的根结点 ROOT( ),由二叉树中的左子树 LBT 转换构造森林中第一棵树的子树森林{T11?, T12?, …, T1m?} ,由二叉树中的右子树 RBT 转换构造森林中其余树构成的森林 {T2,T3, …,Tn } 。 由此,对树和森林进行的各种操作均可通过对二叉树进行相应的操作来完成,但同时也必须注意,此时的二叉树,其左、右子树和根结点之间的关系不再是它的左、右孩子,而是左子树是根的孩子们,右子树是根的兄弟们。 6.7 树和森林的遍历 6.7.1 树的遍历 对树进行遍历可有两条搜索路径: 1.是从左到右 2.是按层次从上到下。 树的按层次遍历类似于二叉树的按层次遍历,例如下图树按层次遍历所得访问的次序的为:ABCDEFGHIJK。 类似于二叉树,在这条搜索路径上途径根结点两次,由对根的访问时机不同可得下列两个算法: 一、先根(次序)遍历树 若树不空,则先访问根结点,然后依次从左到右先根遍历根的各棵子树; ??? 二、后根(次序)遍历树 若树不空,则先依次从左到右后根遍历根的各棵子树,然后访问根结点;??? 树进行从左到右遍历的搜索路径如下图所示。 进行先根遍历所得结点的访问序列为:ABEHIJCDFGK 进行后根遍历所得结点的访问序列为:HIJEBCFKGDA ??? 如图所示 6.7.2 森林的遍历 一、先序遍历森林 ????? 若森林不空,则可依下列次序进行遍历 (1) 访问森林中第一棵树的根结点; (2) 先序遍历第一棵树中的子树森林; (3) 先序遍历除去第一棵树之后剩余的树构成的森林。 二、中序遍历森林 若森林不空,则可依下列次序进行遍历: (1) 中序遍历第一棵树中的子树森林; (2) 访问森林中第一棵树的根结点; (3) 中序遍历除去第一棵树之后剩余的树构成的森林。 森林中的 二叉树中的 (第一棵树的根) -- (
文档评论(0)