




已阅读5页,还剩145页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章,电子科技大学吴跃教授,树和二叉树,6.5线索二叉树,主要内容,6.1树的类型定义,6.2二叉树的类型定义,6.3二叉树的存储结构,6.4二叉树的遍历,6.6树和森林,6.7哈夫曼树及编码,6.1树的类型定义,TreeTreeTreeTreeTree,数据对象D:,D是具有相同特性的数据元素的集合。,若D为空集,则称为空树。否则:(1)在D中存在唯一的称为根root的数据元素;(2)当n1时,其余结点可分为m(m0)个互不相交的有限集T1,T2,Tm,每个集合又是一棵树,并称树Ti是根的子树(subTree),数据关系R:,下图是一棵具有9个结点的树TA,B,C,H,I,结点A为树T的根结点,除根结点A之外的其余结点分为两个不相交的集合:T1B,D,E,F,H,I和T2=C,G,T1和T2构成了结点A的两棵子树,T1和T2本身也分别是一棵树。子树T1的根结点为B,其余结点又分为两个不相交的集合:T11D,T12E,H,I和T13F。T11、T12和T13构成了子树T1的根结点B的三棵子树。如此可继续向下分为更小的子树,直到每棵子树只有一个根结点为止。,树具有下面两个特点:树的根结点没有前驱结点,除根结点之外的所有结点有且只有一个前驱结点。树中所有结点可以有零或多个后继结点。下图所示都不是树结构,A,B,C,D,E,F,G,H,I,J,M,K,L,A(B(E,F(K,L),C(G),D(H,I,J(M),T1,T3,T2,树根,表示方法:,基本操作:,查找类,插入类,删除类,Root(T)/求树的根结点,查找类:,Value(T,cur_e)/求当前结点的元素值,Parent(T,cur_e)/求当前结点的双亲结点,LeftChild(T,cur_e)/求当前结点的最左孩子,RightSibling(T,cur_e)/求当前结点的右兄弟,TreeEmpty(T)/判定树是否为空树,TreeDepth(T)/求树的深度,TraverseTree(T,Visit()/遍历,InitTree(Value(T,e);Parent(T,e);LeftChild(T,e);RightChild(T,e);LeftSibling(T,e);RightSibling(T,e);BiTreeEmpty(T);BiTreeDepth(T);PreOrderTraverse(T,Visit();InOrderTraverse(T,Visit();PostOrderTraverse(T,Visit();LevelOrderTraverse(T,Visit();,插入类:InitBiTree(,删除类:ClearBiTree(,二叉树的重要特性,性质1:在二叉树的第i层上至多有2i-1个结点。(i1),用归纳法证明:归纳基:归纳假设:归纳证明:,i=1层时,只有一个根结点:2i-1=20=1;,假设对所有的j,1ji,命题成立;,二叉树上每个结点至多有两棵子树,则第i层的结点数=2i-22=2i-1。,每层的最大结点个数是确定的。,性质2:深度为k的二叉树上至多含2k-1个结点(k1)。,证明:,基于上一条性质,深度为k的二叉树上的结点数至多为:20+21+2k-1=2k-1,深度一定,二叉树的最大结点数也是确定的。,性质3:对任何一棵二叉树,若它含有n0个叶子结点、n2个度为2的结点,则必存在关系式:n0=n2+1,证明:,设二叉树上结点总数n=n0+n1+n2又二叉树上分支总数b=n1+2n2而b=n-1=n0+n1+n2-1由此,n0=n2+1。,两类特殊的二叉树:,满二叉树:指的是深度为k且含有2k-1个结点的二叉树。,完全二叉树:树中所含的n个结点和满二叉树中编号为1至n的结点一一对应。,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,a,b,c,d,e,f,g,h,i,j,完全二叉树的特点:(1)每个结点i的左子树的深度Lhi-其结点i的右子树的深度Rhi等于0或1,即叶结点只可能出现在最下层或次最下层。(2)完全二叉树结点数n满足2k-1-1n2k-1(3)满二叉树一定是完全二叉树,反之不成立。,LH2=0RH2=1,LH1=3RH1=1LH1-RH1=2,完全二叉树完全二叉树,LH2-RH2=0-1=-1,性质4:具有n个结点的完全二叉树的深度为log2n+1。,证明:,设完全二叉树的深度为k则根据第二条性质得2k-1nn,则该结点无右孩子结点,否则,编号为2i+1的结点为其右孩子结点。,6.5线索二叉树,主要内容,6.1树的类型定义,6.2二叉树的类型定义,6.3二叉树的存储结构,6.4二叉树的遍历,6.6树和森林,6.7哈夫曼树及编码,6.3二叉树的存储结构,二、链式存储,一、顺序存储,#defineMAX_TREE_SIZE100/二叉树的最大结点数typedefTElemTypeSqBiTreeMAX_TREE_SIZE;/0号单元存储根结点SqBiTreebt;,一、二叉树的顺序存储,用一组地址连续的存储单元,以层序顺序存放二叉树的数据元素,结点的相对位置蕴含着结点之间的关系。,bt3的双亲为3/2=1,即在bt1中;其左孩子在bt2i=bt6中;其右孩子在bt2i+1=bt7中,一、二叉树的顺序存储,一棵完全二叉树的顺序存储示意,对于一般的二叉树,如果仍按从上至下和从左到右的顺序将树中的结点顺序存储在一维数组中,则数组元素下标之间的关系不能够反映二叉树中结点之间的逻辑关系,只有增添一些并不存在的空结点,使之成为一棵完全二叉树的形式,然后再用一维数组顺序存储。,一般二叉树改造成完全二叉树形态的顺序存储:显然,这种存储对于需增加许多空结点才能将一棵二叉树改造成为完全二叉树的存储时,会造成空间的大量浪费,不宜用顺序存储结构。,最坏的情况是右单支树,一棵深度为k的右单支树,只有k个结点,却需分配2k1个存储单元。,例,A,B,C,D,E,F,1,4,0,13,2,6,3,5,7,8,9,10,11,12,二、二叉树的链式存储,1.二叉链表,2三叉链表,3双亲链表,4线索链表,root,lchilddatarchild,结点结构:,1.二叉链表,typedefstructBiTNode/结点结构TElemTypedata;structBiTNode*lchild,*rchild;/左右孩子指针BiTNode,*BiTree;,lchilddatarchild,结点结构:,C语言的类型描述:,root,2三叉链表,parentlchilddatarchild,结点结构:,typedefstructTriTNode/结点结构TElemTypedata;structTriTNode*lchild,*rchild,*parent;/左右孩子和双亲指针TriTNode,*TriTree;,parentlchilddatarchild,结点结构:,C语言的类型描述:,0123456,dataparent,结点结构:,3双亲链表,LRTag,LRRRL,typedefstructBPTNode/结点结构TElemTypedata;int*parent;/指向双亲的指针charLRTag;/左、右孩子标志域BPTNodetypedefstructBPTree/树结构BPTNodenodesMAX_TREE_SIZE;intnum_node;/结点数目introot;/根结点的位置BPTree,6.5线索二叉树,主要内容,6.1树的类型定义,6.2二叉树的类型定义,6.3二叉树的存储结构,6.4二叉树的遍历,6.6树和森林,6.7哈夫曼树及编码,一、问题的提出,二、先左后右的遍历算法,三、算法的递归描述,四、中序遍历算法的非递归描述,五、遍历算法的应用举例,顺着某一条搜索路径巡访二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次。,一、问题的提出,访问是一种抽象操作,是对结点的某种处理,例如可以是求结点的度、或层次、打印结点的信息,或做其他任何工作。一次遍历后,使树中结点的非线性排列,按访问的先后顺序变为某种线性排列。,“遍历”是任何类型均有的操作,对线性结构而言,只有一条搜索路径(因为每个结点均只有一个后继),故不需要另加讨论。而二叉树是非线性结构,,每个结点有两个后继,则存在如何遍历即按什么样的搜索路径遍历的问题。,二叉树可以有三条搜索路径:,1先上后下的按层次遍历;2先左(子树)后右(子树)的遍历;3先右(子树)后左(子树)的遍历。,二、先左后右的遍历算法,先(根)序的遍历算法,中(根)序的遍历算法,后(根)序的遍历算法,若二叉树非空,则,(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。,先序遍历算法:,若二叉树非空,则,(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。,中序遍历算法:,若二叉树非空,则,(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。,后序遍历算法:,三、算法的递归描述,voidPreorder(BiTreeT,void(*visit)(TElemType/遍历右子树,图示的二叉树,按先序遍历所得结点序列为:ABDGCEF,三、算法的递归描述,voidInorder(BiTreeT,void(*visit)(TElemType/遍历右子树,图示的二叉树,按中序遍历所得结点序列为:DGBAECF,三、算法的递归描述,voidPostorder(BiTreeT,void(*visit)(TElemType/访问结点,图示的二叉树,按后序遍历所得结点序列为:GDBEFCA,四、中序遍历算法的非递归描述,BiTNode*GoFarLeft(BiTreeT,Stack*S)if(!T)returnNULL;while(T-lchild)Push(S,T);T=T-lchild;returnT;,voidInorder_I(BiTreeT,void(*visit)(TelemType/栈空表明遍历结束/while/Inorder_I,五、遍历算法的应用举例,1、统计二叉树中叶子结点的个数(先序遍历),2、求二叉树的深度(后序遍历),3、复制二叉树(后序遍历),4、建立二叉树(先序和中序),1、统计二叉树中叶子结点的个数,算法基本思想:,先序(或中序或后序)遍历二叉树,在遍历过程中查找叶子结点,并计数。由此,需在遍历算法中增添一个“计数”的参数,并将算法中“访问结点”的操作改为:若是叶子,则计数器增1。,voidCountLeaf(BiTreeT,int/if/CountLeaf,2、求二叉树的深度(后序遍历),算法基本思想:,从二叉树深度的定义可知,二叉树的深度应为其左、右子树深度的最大值加1。由此,需先分别求得左、右子树的深度,算法中“访问结点”的操作为:求得左、右子树深度的最大值,然后加1。,首先分析二叉树的深度和它的左、右子树深度之间的关系。,intDepth(BiTreeT)/返回二叉树的深度if(!T)depthval=0;elsedepthLeft=Depth(T-lchild);depthRight=Depth(T-rchild);depthval=1+(depthLeftdepthRight?depthLeft:depthRight);returndepthval;,3、复制二叉树,其基本操作为:生成一个结点。,根元素,T,左子树,右子树,根元素,NEWT,左子树,右子树,左子树,右子树,(后序遍历),BiTNode*GetTreeNode(TElemTypeitem,BiTNode*lptr,BiTNode*rptr)if(!(T=(BiTNode*)malloc(sizeof(BiTNode)exit(1);T-data=item;T-lchild=lptr;T-rchild=rptr;returnT;,生成一个二叉树的结点(其数据域为item,左指针域为lptr,右指针域为rptr),BiTNode*CopyTree(BiTNode*T)if(!T)returnNULL;if(T-lchild)newlptr=CopyTree(T-lchild);/复制左子树elsenewlptr=NULL;if(T-rchild)newrptr=CopyTree(T-rchild);/复制右子树elsenewrptr=NULL;newT=GetTreeNode(T-data,newlptr,newrptr);returnnewT;/CopyTree,A,B,C,D,E,F,G,H,K,D,C,B,H,K,G,F,E,A,例如:下列二叉树的复制过程如下:,newT,仅知二叉树的先序序列“abcdefg”不能唯一确定一棵二叉树,,由二叉树的先序和中序序列建树,如果同时已知二叉树的中序序列“cbdaegf”,则会如何?,二叉树的先序序列,二叉树的中序序列,左子树,左子树,右子树,右子树,根,根,abcdefg,cbdaegf,例如:,a,a,b,b,c,c,d,d,e,e,f,f,g,g,a,b,c,d,e,f,g,先序序列中序序列,voidCrtBT(BiTreeelse/CrtBT,T=(BiTNode*)malloc(sizeof(BiTNode);T-data=preps;if(k=is)T-Lchild=NULL;elseCrtBT(T-Lchild,pre,ino,ps+1,is,k-is);if(k=is+n-1)T-Rchild=NULL;elseCrtBT(T-Rchild,pre,ino,ps+1+(k-is),k+1,n-(k-is)-1);,6.5线索二叉树,主要内容,6.1树的类型定义,6.2二叉树的类型定义,6.3二叉树的存储结构,6.4二叉树的遍历,6.6树和森林,6.7哈夫曼树及编码,6.5线索二叉树,何谓线索二叉树?线索链表的遍历算法如何建立线索链表?,一、何谓线索二叉树?,遍历二叉树的结果是:求得结点的一个线性序列,例如:,先序序列:ABCDEFGHK,中序序列:BDCAHGKFE,后序序列:DCBHKGFEA,如何”记住”某种顺序?引入线索概念,思考:,通过遍历二叉树可得到结点的一个线性序列,在线性序列中,就存在结点的前驱和后继,但是在二叉树上只能找到结点的左孩子、右孩子,结点的前驱和后继只有在遍历过程中才能得到,那么,能否通过结点的两个链域查找出任一结点的前驱和后继?,指向该线性序列中的“前驱”和“后继”的指针,称作“线索”,与其相应的二叉树,称作“线索二叉树”,包含“线索”的存储结构,称作“线索链表”,ABCDEFGHK,D,C,B,E,对线索链表中结点的约定:,在二叉链表的结点中增加两个标志域,并作如下规定:,若该结点的左子树不空,则Lchild域的指针指向其左子树,且左标志域的值为“指针Link”;否则,Lchild域的指针指向其“前驱”,且左标志的值为“线索Thread”。,若该结点的右子树不空,则rchild域的指针指向其右子树,且右标志域的值为“指针Link”;否则,rchild域的指针指向其“后继”,且右标志的值为“线索Thread”。,如此定义的二叉树的存储结构称作“线索链表”。,线索二叉树的整体结构:,增设一个头结点,令其lchild指向二叉树的根结点,LTag=0、RTag=1;并将该结点作为遍历访问的第一个结点的前驱和最后一个结点的后继;最后用头指针指示该头结点。,typedefstructBiThrNodTElemTypedata;structBiThrNode*lchild,*rchild;/左右指针PointerThrLTag,RTag;/左右标志BiThrNode,*BiThrTree;,线索链表的类型描述:,typedefenumLink,ThreadPointerThr;/Link=0:指针,Thread=1:线索,二、线索链表的遍历算法:,for(p=firstNode(T);p;p=Succ(p)Visit(p);,由于在线索链表中添加了遍历中得到的“前驱”和“后继”的信息,从而简化了遍历的算法。,对中序线索化链表的遍历算法,中序遍历的第一个结点?,在中序线索化链表中结点的后继?,左子树上处于“最左下”(没有左子树)的结点。,若无右子树,则为后继线索所指结点;,否则为对其右子树进行中序遍历时访问的第一个结点。,voidInOrderTraverse_Thr(BiThrTreeT,void(*Visit)(TElemTypee)p=T-lchild;/p指向根结点的左子树while(p!=T)/空树或遍历结束时,p=Twhile(p-LTag=Link)p=p-lchild;/找第一个结点Visit(p-data);while(p-RTag=Thread/p进至其右子树根/InOrderTraverse_Thr,在中序遍历过程中修改结点的左、右指针域,以保存当前访问结点的“前驱”和“后继”信息。遍历过程中,附设指针pre,并始终保持指针pre指向当前访问的、指针p所指结点的前驱。,三、如何建立线索链表?,voidInThreading(BiThrTreep)if(p)/对以p为根的非空二叉树进行线索化InThreading(p-lchild);/左子树线索化if(!p-lchild)/建前驱线索p-LTag=Thread;p-lchild=pre;if(!pre-rchild)/建后继线索pre-RTag=Thread;pre-rchild=p;pre=p;/保持pre指向p的前驱InThreading(p-rchild);/右子树线索化/if/InThreading,6.5线索二叉树,主要内容,6.1树的类型定义,6.2二叉树的类型定义,6.3二叉树的存储结构,6.4二叉树的遍历,6.6树和森林,6.7哈夫曼树及编码,树的三种存储结构,一、双亲表示法,二、孩子链表表示法,三、树的二叉链表(孩子-兄弟)存储表示法,0A-11B02C03D04E25F26G5,r=0n=7,dataparent,一、双亲表示法:,typedefstructPTNodeElemdata;intparent;/双亲位置域PTNode;,dataparent,#defineMAX_TREE_SIZE100,结点结构:,C语言的类型描述:,typedefstructPTNodenodesMAX_TREE_SIZE;intr,n;/根结点的位置和结点个数PTree;,树结构:,A,B,C,D,E,F,G,0A1B2C3D4E5F6G,r=0n=7,datafirstchild,123,45,6,二、孩子链表表示法:,-1000224,(双亲),parent,typedefstructCTNodeintchild;structCTNode*next;*ChildPtr;/指向孩子结点的指针,孩子结点结构:,childnext,C语言的类型描述:,CTNode,typedefstructElemdata;ChildPtrfirstchild;/孩子链表的头指针CTBox;,双亲结点结构,datafirstchild,CTBox,typedefstructCTBoxnodesMAX_TREE_SIZE;intn,r;/结点数和根结点的位置CTree;,树结构:,A,B,C,D,E,F,G,ABCEDFG,root,ABCEDFG,三、树的二叉链表(孩子-兄弟)存储表示法,typedefstructCSNodeElemdata;structCSNode*firstchild,*nextsibling;CSNode,*CSTree;,C语言的类型描述:,结点结构:,firstchilddatanextsibling,树转换为二叉树,将一棵树转换为二叉树的方法是:树中所有相邻兄弟之间加一条连线。对树中的每个结点,只保留它与第一个孩子结点之间的连线,删去它与其它孩子结点之间的连线。以树的根结点为轴心,将整棵树顺时针转动一定的角度,使之结构层次分明。,树二叉树,A,E,B,D,F,G,C,1.加线,2.删线,3.旋转,特点:在二叉树中,左分支上的各结点在原来的树中是父子关系;而右分支上的各结点在原来的树中是兄弟关系;由于树的根结点没有兄弟,所以变换后的二叉树的根结点的右孩子必为空。,二叉树转换为树和森林,将一棵二叉树还原为树或森林的方法:若某结点是其双亲的左孩子,则把该结点的右孩子、右孩子的右孩子都与该结点的双亲结点用线连起来;删去原二叉树中所有的双亲结点与右孩子结点的连线;整理由、两步所得到的树或森林,使之结构层次分明。,二叉树树,B,E,F,G,H,A,C,D,I,二叉树森林,B,D,G,J,K,E,H,L,A,F,C,I,森林转换为二叉树,由森林的概念可知,森林是若干棵树的集合,只要将森林中各棵树的根视为兄弟,森林同样可以用二叉树表示。森林转换为二叉树的方法:将森林中的每棵树转换成相应的二叉树。第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树根结点的右孩子,当所有二叉树连起来后,所得到的二叉树就是由森林转换得到的二叉树。,森林二叉树,A,B,C,G,H,D,E,F,I,J,K,L,M,一、树的遍历,二、森林的遍历,三、树的遍历的应用,树的遍历可有三条搜索路径:,层次遍历:,先根(次序)遍历:,后根(次序)遍历:,若树不空,则先访问根结点,然后依次先根遍历各棵子树。,若树不空,则先依次后根遍历各棵子树,然后访问根结点。,若树不空,则自上而下自左至右访问树中每个结点。,ABCDEFGHIJK,先根遍历时结点的访问次序:,ABEFCDGHIJK,后根遍历时结点的访问次序:,EFBCIJKHGDA,层次遍历时结点的访问次序:,ABCDEFGHIJK,1森林中第一棵树的根结点;,2森林中第一棵树的子树森林;,3森林中其它树构成的森林。,森林由三部分构成:,1.先序遍历,森林的遍历,若森林不空,则访问森林中第一棵树的根结点;先序遍历森林中第一棵树的子树森林;先序遍历森林中(除第一棵树之外)其余树构成的森林。,即:依次从左至右对森林中的每一棵树进行先根遍历。,BEFGHIJKLM,中序遍历,若森林不空,则中序遍历森林中第一棵树的子树森林;访问森林中第一棵树的根结点;中序遍历森林中(除第一棵树之外)其余树构成的森林。,即:依次从左至右对森林中的每一棵树进行后根遍历。,EFBGKLMJIH,树的遍历和二叉树遍历的对应关系,先根遍历,后根遍历,树,二叉树,森林,先序遍历,先序遍历,中序遍历,中序遍历,6.5线索二叉树,主要内容,6.1树的类型定义,6.2二叉树的类型定义,6.3二叉树的存储结构,6.4二叉树的遍历,6.6树和森林,6.7哈夫曼树及编码,6.7哈夫曼树及编码,如何构造最优树,最优树的定义,前缀编码,一、最优树(哈夫曼树),树的路径长度:树中每个结点的路径长度之和。完全二叉树是路径长度最短的二叉树。,结点的路径长度:从根结点到该结点的路径上分支的数目。,树的带权路径长度:,考虑带权时:设树中有m个叶结点,每个叶结点带一个权值w且根到叶结点i的路径长度为Li(=1,2,m),则树的带权路径长度为树中所有叶结点的权值与路径长度的乘积的总和。m即:iii,称树的带权路径长度最短的一类树为“最优树”。,在给定一组具有确定权值的叶结点,可以构造出不同的带权二叉树。例如,给出4个叶结点,设其权值分别为1,3,5,7,我们可以构造出形状不同的多个二叉树。下图给出了其中5个不同形状的二叉树,其带权路径长度分别为:(a)WPL1232527232(b)WPL1333527129(c)WPL1233537133(d)WPL7353321143(e)WPL7152331329,根据给定的n个权值w1,w2,wn,构造n棵二叉树的集合F=T1,T2,Tn,其中每棵二叉树中均只含一个带权值为wi的根结点,其左、右子树为空树;,二、如何构造最优树,(1),(哈夫曼算法)以二叉树为例:,在F中选取其根结点的权值最小的两棵二叉树,分别作为左、右子树构造一棵新的二叉树,并置这棵新的二叉树根结点的权值为其左、右子树根结点的权值之和;,(2),从F中删去这两棵树,同时加入刚生成的新树;,重复(2)和(3)两步,直至F中只含一棵树为止。,(3),(4),9,例:已知权值W=5,6,2,9,7,5,6,2,7,5,2,7,6,9,7,6,7,13,9,9,29,如此建立的哈夫曼树是否唯一?,9,16,三、前缀编码,ABACCDA,ABACCDA,三、前缀编码,利用哈夫曼树可以构造一种不等长的二进制编码,并且构造所得的哈夫曼编码是一种最优前缀编码,使电文的总长度最短。,设有n种字符,每种字符出现的次数为Wi,其编码长度为Li(i=1,2,n),则整个电文总长度为WiLi,要得到最短的电文,即使得WiLi最小。也就是以字符出现的次数为权值,构造一棵Huffman树,并规定左分支编码为0,右分支编码为1,则字符的编码就是从根到该字符所在的叶结点的路径上的分支编号序列。用构造Huffman树编出来的码,称为Huffman编码。,A:9B:7C:6D:5D:2,哈夫曼树的构造算法在构造哈夫曼树时,可以设置一个结构数组HuffNode保存哈夫曼树中各结点的信息,根据二叉树的性质可知,具有n个叶子结点的哈夫曼树共有2n1个结点,所以数组HuffNode的大小设置为2n1,数组元素的结构形式如下:,哈夫曼树的构造算法:#defineMAXVALUE10000/定义最大权值#defineMAXLEAF30/定义哈夫曼树中叶子结点个数#defineMAXN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学新教师职业发展培训计划
- 新能源产业生产计划管理流程
- 九年级下学期班主任培训学习计划
- 2025-2030年中国4A沸石行业运行趋势分析及发展商机研究报告
- 养老院环境优化与设施改进计划
- 建筑工地安全目标及防护计划
- 2025-2030鲜奶行业市场风险投资及运作模式与投融资研究报告
- 2025-2030颜料行业兼并重组机会研究及决策咨询报告
- 2025-2030韩国胎牛血清行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030银行保险行业市场发展现状分析及竞争格局与投资价值研究报告
- 2025至2030年中国聚己内酯(PCL)行业深度调研与投资战略咨询报告
- 2025年部编版新教材语文一年级下册期末复习计划及全册单元复习课教案
- 集体委托个人委托书范本
- 早自习迟到检讨书综合(总结19篇)
- 中考语文试卷名著阅读专题汇编《艾青诗选》诗歌赏析题(截至2024年)
- 塑料零件的快速换模技术考核试卷
- 足疗技师2025年度买钟外出安全协议细则
- 大学生创业基础知到智慧树章节测试课后答案2024年秋湖北工业大学
- 人教版七年级生物下册第四单元测试题及答案
- 硫酸的安全培训
- 《化工过程本质安全化评估技术指南》
评论
0/150
提交评论