树与二叉树的关系课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《树与二叉树的关系课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 关系 课件
- 资源描述:
-
1、6.4.1 树的存储结构树的存储结构6.4.2 树、森林与二叉树的相互转换树、森林与二叉树的相互转换6.4.3 树与森林的转换树与森林的转换6.4 6.4 树、森林和二叉树的关系树、森林和二叉树的关系6.4.1 6.4.1 树的存储结构树的存储结构树的主要存储方法有:树的主要存储方法有:一、双亲表示法一、双亲表示法二、孩子表示法二、孩子表示法三、孩子兄弟表示法三、孩子兄弟表示法一、一、双亲表示法:双亲表示法:用一组连续的空间来存储树中的结点,每个结点用一组连续的空间来存储树中的结点,每个结点附设一个指示器指示其双亲结点在表中的位置,其结附设一个指示器指示其双亲结点在表中的位置,其结点的结构如下
2、:点的结构如下:数据数据 双亲双亲DataParent1245637树的双亲表示法如下图:树的双亲表示法如下图:1615140302-11ParentData543210结点结点序号序号672双亲表示法的优点:双亲表示法的优点:利用了树中每个结点(根结点除外)利用了树中每个结点(根结点除外)只有一个双亲结点的性质,使得查找某只有一个双亲结点的性质,使得查找某个结点的双亲结点非常容易。个结点的双亲结点非常容易。双亲表示法的缺点:双亲表示法的缺点:求某个结点的孩子时,需要遍历整求某个结点的孩子时,需要遍历整个表。个表。#define MAX 100typedef struct TNode Data
3、Type data;int parent;TNode;一棵树可以定义为:一棵树可以定义为:typedef struct TNode treeMAX;int nodenum;/*结点数结点数*/ParentTree;双亲表示法的结点结构定义:双亲表示法的结点结构定义:二、二、孩子表示法:孩子表示法:通常是把每个结点的孩子结点排列通常是把每个结点的孩子结点排列起来,构成一个单链表,称为孩子链表。起来,构成一个单链表,称为孩子链表。n n个结点共有个结点共有n n个孩子链表(叶结点的孩个孩子链表(叶结点的孩子链表为空表)。子链表为空表)。n n个结点的数据和个结点的数据和n n个孩子链表的头个孩子链
4、表的头指针又组成一个顺序表。指针又组成一个顺序表。树的孩子链表表示法见树的孩子链表表示法见p175的图的图6.26孩子表示法示意图孩子表示法示意图:ABCDEFG1 A 2 B 3 C 4 D 5 E 6 F 7 Groot=1num=7 data fch75 6 2 3 4 0111335par带双亲的孩子表示法带双亲的孩子表示法:孩子表示法的结构定义:孩子表示法的结构定义:typedef struct ChildNode /*孩子链表结点的定义孩子链表结点的定义*/int Child;struct ChildNode*next;ChildNode;typedef struct /*树的定义
5、树的定义*/DataNode nodesMAX;/*顺序表顺序表*/int root,num;/*根结点指示及结点个数根结点指示及结点个数*/ChildTree;ChildTree;typedef struct /*顺序表结点的结构定义顺序表结点的结构定义*/DataType data;ChildNode*FirstChild;DataNode;三、三、孩子兄弟表示法孩子兄弟表示法 孩子兄弟表示法孩子兄弟表示法又称又称二叉链表表示法二叉链表表示法,表,表中每个结点设有两个链域,分别指向该结点的中每个结点设有两个链域,分别指向该结点的第一个孩子结点和下一个兄弟(右兄弟)结点。第一个孩子结点和下一
6、个兄弟(右兄弟)结点。fch data nsib第一孩子第一孩子 下一兄弟下一兄弟结点结构结点结构:孩子兄弟表示法的结点结构定义:孩子兄弟表示法的结点结构定义:typedef struct CSNode DataType data;Struct CSNode*FCh,*Nsib;CSNode,CSNode,*CSTree;CSTree;孩子兄弟表示法示意图:孩子兄弟表示法示意图:ABCDEFGroot AB C E D F G优点:优点:便于实现树的各种操作;便于实现树的各种操作;可实现树可实现树(森林森林)与二叉树的相互转换。与二叉树的相互转换。ABCDEFGABCDEFG无兄弟无兄弟无右孩
7、子无右孩子森林中森林中兄弟树兄弟树将转为将转为右子树右子树对应的关系:对应的关系:树树 二叉树二叉树 根根 根根 第一孩子第一孩子 左孩子左孩子 下一兄弟下一兄弟 右孩子右孩子一、一、树转换为二叉树树转换为二叉树 约定树中每一个结点的孩子结点按从左到约定树中每一个结点的孩子结点按从左到右的次序顺序编号,即把树看作为有序树。右的次序顺序编号,即把树看作为有序树。6.4.2 6.4.2 树、森林与二叉树的相互转换树、森林与二叉树的相互转换将一棵树转换为二叉树的方法:将一棵树转换为二叉树的方法:树中所有相邻兄弟之间加一条连线。树中所有相邻兄弟之间加一条连线。对树中的每个结点,只保留其与第一个对树中的
8、每个结点,只保留其与第一个孩子结点之间的连线,删去其与其它孩子结孩子结点之间的连线,删去其与其它孩子结点之间的连线。点之间的连线。以树的根结点为轴心,将整棵树顺时针以树的根结点为轴心,将整棵树顺时针旋转一定的角度,使之结构层次分明。旋转一定的角度,使之结构层次分明。树转换为二叉树示意图树转换为二叉树示意图ABECDFGHABECDFGHABECDFGHABECDFGH森林转换为二叉树的方法为:森林转换为二叉树的方法为:(1 1)将森林中的每棵树转换成相应的二叉树。)将森林中的每棵树转换成相应的二叉树。(2 2)第一棵二叉树不动,从第二棵二叉树开)第一棵二叉树不动,从第二棵二叉树开始,依次把后一
9、棵二叉树的根结点作为前一始,依次把后一棵二叉树的根结点作为前一棵二叉树根结点的右孩子,当所有二叉树连棵二叉树根结点的右孩子,当所有二叉树连在一起后,所得到的二叉树就是由森林转换在一起后,所得到的二叉树就是由森林转换得到的二叉树。得到的二叉树。二、森林转换为二叉树二、森林转换为二叉树森林转换为二叉树示意图森林转换为二叉树示意图 B E CH D I F J G B C D E F GH I J森林转换为二叉树的实例另见森林转换为二叉树的实例另见p179的图的图6.31递归方法描述森林转换为二叉树递归方法描述森林转换为二叉树:将森林将森林F F看作树的有序集看作树的有序集F=TF=T1 1,T T
10、2 2,,T,TN N,它对应的二叉树为它对应的二叉树为B B(F F):):(1 1)若)若N N0 0,则,则B B(F F)为空。)为空。(2 2)若)若N0N0,则:,则:二叉树二叉树B B(F F)的根为森林中第一棵树)的根为森林中第一棵树T T1 1的根;的根;B B(F F)的左子树为)的左子树为B B(TT1111,T T1m1m),其),其中中TT1111,T T1m1m 是是T T1 1的子树森林;的子树森林;B B(F F)的右子树是)的右子树是B B(T2T2,T TN N)。)。二叉树转换为树或森林的方法为:二叉树转换为树或森林的方法为:(1 1)若某结点是其双亲的左
11、孩子,则把该结)若某结点是其双亲的左孩子,则把该结点的右孩子、右孩子的右孩子、点的右孩子、右孩子的右孩子、都与该都与该结点的双亲结点用线连起来。结点的双亲结点用线连起来。(2 2)删掉原二叉树中所有双亲结点与右孩子)删掉原二叉树中所有双亲结点与右孩子结点的连线。结点的连线。(3 3)整理由()整理由(1 1)、()、(2 2)两步所得到的树或)两步所得到的树或森林,使之结构层次分明。森林,使之结构层次分明。三、二叉树转换为树或森林三、二叉树转换为树或森林 二叉树转换为森林的示意图二叉树转换为森林的示意图DABCEFGHIJDABCEFGHIJHIJGDABCEF 若若B B是一棵二叉树,是一棵
12、二叉树,T T是是B B的根结点,的根结点,L L是是B B的的左子树,左子树,R R为为B B的右子树,设的右子树,设B B对应的森林对应的森林F F(B B)中含有的中含有的n n棵树为棵树为T T1 1,T,T2 2,T,Tn n,则有:,则有:(1 1)B B为空,则:为空,则:F F(B B)为空的森林()为空的森林(n n0 0)。)。(2 2)B B非空,则:非空,则:F F(B B)中第一棵树)中第一棵树T T1 1的根为二叉树的根为二叉树B B的根的根T T;T T1 1中根结点的子树森林由中根结点的子树森林由B B的左子树的左子树L L转换而转换而成,即成,即F F(L L
13、)=T=T1111,T,T1m1m;B B的右子树的右子树R R转换为转换为F F(B B)中其余树组成的森)中其余树组成的森林,即林,即F(R)F(R)T T2 2,T,T3 3,T,Tn n。用递归的方法描述其转换用递归的方法描述其转换6.4.3 6.4.3 树与森林的遍历树与森林的遍历一、一、树的遍历树的遍历树的遍历主要有以下两种:树的遍历主要有以下两种:先根遍历先根遍历 后根遍历后根遍历1 1、先根遍历、先根遍历若树非空,则遍历过程为:若树非空,则遍历过程为:(1)访问根结点。)访问根结点。(2)从左到右,依次)从左到右,依次先根遍历根结点的每一棵子树。先根遍历根结点的每一棵子树。AB
14、ECDFGH如图中树的先根遍历序列为:如图中树的先根遍历序列为:ABECFHGD。若树非空,则遍历过程为:若树非空,则遍历过程为:(1 1)从左到右,依次后根遍历根结点的每一)从左到右,依次后根遍历根结点的每一棵子树。棵子树。(2 2)访问根结点。)访问根结点。ABECDFGH如图树的后根遍历序列为:如图树的后根遍历序列为:EBHFGCDA。2 2、后根遍历、后根遍历 A B E CH D I F J G A B C D E F GH I J树的后根遍历:树的后根遍历:H I J E B C F G D A树的先根遍历:树的先根遍历:A B E H I J C D F G对应二叉树的先序遍历对
15、应二叉树的先序遍历 对应二叉树的中序遍历对应二叉树的中序遍历 二、树的遍历算法二、树的遍历算法 先根遍历方法一先根遍历方法一void RootFirst(CSTree root)if(root!=NULL)Visit(root-data);/*访问根结点访问根结点*/p=root-FCh;while(p!=NULL)RootFirst(p);/*访问以访问以p为根的子树为根的子树*/p=p-Nsib;先根遍历方法二先根遍历方法二 void RootFirst(CSTree root)if(root!=NULL)Visit(root-data);/*访问根结点访问根结点*/RootFirst(r
16、oot-FCh);/*先根遍历首子树先根遍历首子树*/RootFirst(root-Nsib);/*先根遍历兄弟树先根遍历兄弟树*/三、森林的遍历三、森林的遍历森林的遍历方法主要有以下三种:森林的遍历方法主要有以下三种:先序遍历先序遍历 中序遍历中序遍历 *后序遍历后序遍历1 1、先序遍历、先序遍历若森林非空,则遍历方法为:若森林非空,则遍历方法为:(1 1)访问森林中第一棵树的根结点。)访问森林中第一棵树的根结点。(2 2)先序遍历第一棵树的根结点的子树森林。)先序遍历第一棵树的根结点的子树森林。(3 3)先序遍历除去第一棵树之后剩余的树构成)先序遍历除去第一棵树之后剩余的树构成的森林。的森
17、林。即:依次从左至右对森林中的每一棵树进即:依次从左至右对森林中的每一棵树进 行行先根遍历先根遍历。若森林非空,则遍历方法为:若森林非空,则遍历方法为:(1 1)中序遍历森林中第一棵树的根结点的)中序遍历森林中第一棵树的根结点的 子树森林。子树森林。(2 2)访问第一棵树的根结点。)访问第一棵树的根结点。(3 3)中序遍历除去第一棵树之后剩余的树)中序遍历除去第一棵树之后剩余的树 构成的森林。构成的森林。2 2、中序遍历、中序遍历即:依次从左至右对森林中的每一棵树进行即:依次从左至右对森林中的每一棵树进行 后根遍历后根遍历。先序遍历先序遍历森林时顶点时顶点的访问次序:的访问次序:A B C D
18、 E F G H I J 中序遍历中序遍历森林时顶点时顶点的访问次序:的访问次序:B C D A F E I H J G A E GB C D F H J I AB E C F G D H I J 树和森林的遍历和二叉树和森林的遍历和二叉树遍历的对应关系树遍历的对应关系?先根遍历先根遍历后根遍历后根遍历树树二叉树二叉树森林森林先序遍历先序遍历先序遍历先序遍历中序遍历中序遍历中序遍历中序遍历3 3、森林的后序遍历、森林的后序遍历*若森林非空,则遍历方法为:若森林非空,则遍历方法为:(1 1)后序遍历森林中第一棵树的根结点的子)后序遍历森林中第一棵树的根结点的子树森林。树森林。(2 2)后序遍历除
19、去第一棵树之后剩余的树构)后序遍历除去第一棵树之后剩余的树构成的森林。成的森林。(3 3)访问第一棵树的根结点。)访问第一棵树的根结点。6.5 6.5 哈夫曼树及其应用哈夫曼树及其应用6.5.1 6.5.1 哈夫曼树哈夫曼树 哈夫曼树最典型、最广泛的应用是在哈夫曼树最典型、最广泛的应用是在编码技术上,利用哈夫曼树,可以得到编码技术上,利用哈夫曼树,可以得到平均长度最短的编码。这在通讯领域是平均长度最短的编码。这在通讯领域是极其有价值的。极其有价值的。计算机程序操作码的优化也可以利用计算机程序操作码的优化也可以利用哈夫曼树实现。哈夫曼树实现。路径:路径:从一个结点到另一个结点之间的分支从一个结点
20、到另一个结点之间的分支 序列。序列。路径长度:路径长度:从一个结点到另一个结点所经过从一个结点到另一个结点所经过 的分支条数。的分支条数。树的路径长度:树的路径长度:树中每个结点与根之间的路径树中每个结点与根之间的路径 长度之和长度之和(PL)。a例:例:PL(a)=1+1+2+2+2+2=10 bPL(b)=1+1+2+2+3+3=12一、基本概念:一、基本概念:带权路径长度:带权路径长度:在树形结构中,我们把从树根在树形结构中,我们把从树根到某一结点的路径长度与该结点权的乘积,称到某一结点的路径长度与该结点权的乘积,称做该结点的带权路径长度。做该结点的带权路径长度。树的带权路径长度:树的带
展开阅读全文