树和二叉树教学课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《树和二叉树教学课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 教学 课件
- 资源描述:
-
1、第六章第六章树和二叉树树和二叉树16.6 6.6 赫夫曼树及其应用赫夫曼树及其应用6.1 6.1 树的定义和基本术语树的定义和基本术语6.2 6.2 二叉树二叉树6.3 6.3 遍历二叉树和线索二叉树遍历二叉树和线索二叉树6.4 6.4 树和森林树和森林 2 6.4 6.4 树和森林树和森林6.4.1 6.4.1 树的存储结构树的存储结构6.4.2 6.4.2 森林与二叉树的转换森林与二叉树的转换6.4.3 6.4.3 树和森林的遍历树和森林的遍历36.4.1 6.4.1 树的存储结构树的存储结构一、一、双亲表示法双亲表示法二、二、孩子链表表示法孩子链表表示法三、三、孩子兄弟存储表示法孩子兄弟
2、存储表示法4ABCDEFGr=0n=70 A -11 B 02 C 03 D 04 E 2 5 F 26 G 5data parent一、双亲表示法一、双亲表示法:5 typedef struct PTNode ElemType data;int parent;/双亲位置域 PTNode;data parent#define MAX_TREE_SIZE 100结点结构结点结构:C语言的类型描述语言的类型描述:6typedef struct PTNode nodes MAX_TREE_SIZE;int r,n;/根结点的位置和结点个数 PTree;树结构树结构:7 data child1chil
3、d2child3childd二、孩子二、孩子(链表链表)表示法表示法:其中其中d d是结点的度是结点的度;由于每个结点的子女个数是不限由于每个结点的子女个数是不限制的制的,则如按照度最大的结点的度分配则如按照度最大的结点的度分配子女指针的个数子女指针的个数,则在实际应用中则在实际应用中,会有会有很多空指针域很多空指针域,造成空间的浪费。造成空间的浪费。8r=0n=7 data firstchildABCDEFG0 A -11 B 02 C 03 D 04 E 25 F 26 G 464 5 1 2 39typedef struct CTNode int child;struct CTNode*
4、next;*ChildPtr;孩子结点结构孩子结点结构:child nextC语言的类型描述语言的类型描述:10 typedef struct ElemType data;ChildPtr firstchild;/孩子链的头指针 CTBox;双亲结点结构双亲结点结构 data firstchild11typedef struct CTBox nodesMAX_TREE_SIZE;int n,r;/结点数和根结点的位置 CTree;树结构树结构:12ABCDEFGroot AB C E D F G AB C E D F G 三、树的孩子三、树的孩子-兄弟兄弟(二叉链表二叉链表)表示法表示法131
5、4typedef struct CSNode ElemType data;struct CSNode *firstchild,*nextsibling;CSNode,*CSTree;C语言的类型描述语言的类型描述:结点结构结点结构:firstchild data nextsibling15 6.4.26.4.2 森林与二叉树的转换森林与二叉树的转换设设森林森林 F=(T1,T2,Tn);T1=(root,t11,t12,t1m);二叉树二叉树 B=(LBT,Node(root),RBT);16由森林转换成二叉树由森林转换成二叉树的转换规则为:若 F=,则 B=;由 ROOT(T1)对应得到No
6、de(root);否则,由(t11,t12,t1m)对应得到 LBT;由(T2,T3,Tn)对应得到 RBT。17T1T11,T12,T1mT2,TnLBTRBTroot1819T1 T2 T3T1 T2 T3AFBCDEGHIKJAFHBC DGIJEK3 棵树的森林各棵树的二叉树表示ABCEDHIKJFG森林的二叉树表示20由二叉树转换为森林由二叉树转换为森林的转换规则为:由LBT 对应得到(t11,t12,,t1m);若 B=,则 F=;否则,由 Node(root)对应得到 ROOT(T1);由RBT 对应得到(T2,T3,Tn)。21 22 T1 T2 T3AFHBCDGIJEK3
7、棵树的森林ABCEDHIKJFG森林的二叉树表示23 由此,树和森林的各种操作均可与二叉树的各种操作相对应。应当注意的是,应当注意的是,和树对应的二叉树,其左、右子树的概念已改变为:左是孩子,右是兄弟左是孩子,右是兄弟246.4.36.4.3树和森林的遍历树和森林的遍历25一、树的遍历一、树的遍历二、森林的遍历二、森林的遍历26树的遍历树的遍历:先根先根(次序次序)遍历遍历:后根后根(次序次序)遍历遍历:若树不空,则先访问根结点,然后若树不空,则先访问根结点,然后依次按依次按各棵子树。各棵子树。若树不空,则先依次按若树不空,则先依次按各各棵子树,然后访问根结点。棵子树,然后访问根结点。27 A
8、 B C DE F G H I J K 先根遍历时结点的先根遍历时结点的访问次序:访问次序:A B E F C D G H I J K 后根遍历时结点的后根遍历时结点的访问次序:访问次序:E F B C I J K H G D A28 B C DE F G H I J K1.森林中第一棵树的根结点;2.森林中第一棵树的子树森林;3.森林中其它树构成的森林。可以分解成三部分:森林森林29 若森林不空,则访问访问森林中第一棵树的根结点;先序遍历先序遍历森林中第一棵树的子树森林;先序遍历先序遍历森林中(除第一棵树之外)其 余树构成的森林。先序遍历先序遍历森林的遍历森林的遍历即:依次从左至右依次从左至
9、右对森林中的每一棵树树进行先根遍历先根遍历。30 中序遍历中序遍历 若森林不空,则中序遍历中序遍历森林中第一棵树的子树森林;访问访问森林中第一棵树的根结点;中序遍历中序遍历森林中(除第一棵树之外)其 余树构成的森林。即:依次从左至右依次从左至右对森林中的每一棵树树进行后根遍历后根遍历。31 树的遍历和二叉树遍历树的遍历和二叉树遍历的对应关系的对应关系?先根遍历先根遍历后根遍历后根遍历树树二叉树二叉树森林森林先序遍历先序遍历先序遍历先序遍历中序遍历中序遍历中序遍历中序遍历32设树的存储结构为孩子兄弟链表设树的存储结构为孩子兄弟链表typedef struct CSNode ElemType da
10、ta;struct CSNode*firstchild,*nextsibling;CSNode,*CSTree;一、求树的深度一、求树的深度二、输出树中所有从根到叶子的路径二、输出树中所有从根到叶子的路径三、建树的存储结构三、建树的存储结构33Int Depth(CSTree T)If(T=NULL)return 0;ElseD1=Depth(T-firstchild);D2=Depth(T-nextsibling);Return Maxd1+1,d234int TreeDepth(CTree T)/T 是树的孩子链表存储结构,/返回该树的深度 if(T.n=0)return 0;else r
11、eturn Depth(T,T.r);/TreeDepth一、求树的深度的算法:一、求树的深度的算法:35int Depth(CTree T,int root)max=0;p=T.nodesroot.firstchild;while(p)h=Depth(T,p-child);if(h max)max=h;p=p-nextchild;/while return max+1;36二、二、输出树中所有从根到叶子的路径的算法输出树中所有从根到叶子的路径的算法:A B C DE F G H I J K例如:对左图所示的树,其输出结果应为:A B EA B FA CA D G H IA D G H JA
12、D G H K37void AllPath(BiTree T,Stack&S)if(T)Push(S,T-data);if(!T-Lchild&!T-Rchild)PrintStack(S);else AllPath(T-Lchild,S);AllPath(T-Rchild,S);Pop(S);/if(T)/AllPath/输出二叉树上从根到所有叶子结点的路径输出二叉树上从根到所有叶子结点的路径38void OutPath(Bitree T,Stack&S)while(!T)Push(S,T-data);if(!T-firstchild)Printstack(S);else OutPath(T
13、-firstchild,S);Pop(S);T=T-nextsibling;/while/OutPath/输出森林中所有从根到叶的路径3940三、建树的存储结构的算法三、建树的存储结构的算法:和二叉树类似,不同的定义相应有不同的算法。假设以二元组(F,C)的形式自上而下自上而下、自左而右自左而右依次输入树的各边,建立树的孩子孩子-兄弟链表兄弟链表。41ABCDEFG例如例如:对下列所示树的输入序列应为:(#,A)(A,B)(A,C)(A,D)(C,E)(C,F)(E,G)ABCD(#,A)(A,B)(A,C)(A,D)(C,E)可见,算法中需要一个队列队列保存已建好的结点的指针指针42void
展开阅读全文