第5章 树和二叉树

合集下载

数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL

数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL

数据结构与算法系列研究五——树、⼆叉树、三叉树、平衡排序⼆叉树AVL树、⼆叉树、三叉树、平衡排序⼆叉树AVL⼀、树的定义树是计算机算法最重要的⾮线性结构。

树中每个数据元素⾄多有⼀个直接前驱,但可以有多个直接后继。

树是⼀种以分⽀关系定义的层次结构。

a.树是n(≥0)结点组成的有限集合。

{N.沃恩}(树是n(n≥1)个结点组成的有限集合。

{D.E.Knuth})在任意⼀棵⾮空树中:⑴有且仅有⼀个没有前驱的结点----根(root)。

⑵当n>1时,其余结点有且仅有⼀个直接前驱。

⑶所有结点都可以有0个或多个后继。

b. 树是n(n≥0)个结点组成的有限集合。

在任意⼀棵⾮空树中:⑴有⼀个特定的称为根(root)的结点。

⑵当n>1时,其余结点分为m(m≥0)个互不相交的⼦集T1,T2,…,Tm。

每个集合本⾝⼜是⼀棵树,并且称为根的⼦树(subtree)树的固有特性---递归性。

即⾮空树是由若⼲棵⼦树组成,⽽⼦树⼜可以由若⼲棵更⼩的⼦树组成。

树的基本操作1、InitTree(&T) 初始化2、DestroyTree(&T) 撤消树3、CreatTree(&T,F) 按F的定义⽣成树4、ClearTree(&T) 清除5、TreeEmpty(T) 判树空6、TreeDepth(T) 求树的深度7、Root(T) 返回根结点8、Parent(T,x) 返回结点 x 的双亲9、Child(T,x,i) 返回结点 x 的第i 个孩⼦10、InsertChild(&T,&p,i,x) 把 x 插⼊到 P的第i棵⼦树处11、DeleteChild(&T,&p,i) 删除结点P的第i棵⼦树12、traverse(T) 遍历树的结点:包含⼀个数据元素及若⼲指向⼦树的分⽀。

●结点的度: 结点拥有⼦树的数⽬●叶结点: 度为零的结点●分枝结点: 度⾮零的结点●树的度: 树中各结点度的最⼤值●孩⼦: 树中某个结点的⼦树的根●双亲: 结点的直接前驱●兄弟: 同⼀双亲的孩⼦互称兄弟●祖先: 从根结点到某结点j 路径上的所有结点(不包括指定结点)。

5(选讲)树和二叉树解析

5(选讲)树和二叉树解析

树。所以树的定义是递归的 。
2018/10/13 8
2.树的基本术语
树的结点包含一个数据元素及若干指向其子树的分支。
1. 树的结点:包含一个DE和指向其子树的所有分支; 2. 结点的度:一个结点拥有的子树个数,度为零的结点称为叶结点; 3. 树的度:树中所有结点的度的最大值 Max(D(I)) 含义:树中最大分支数为树的度; 4. 结点的层次及树的深度:根为第一层,根的孩子为第二层,若某结 点为第k层,则其孩子为k+1层. 树中结点的最大层次称为树的深度或高度 5.森林:是m(m>=0)棵互不相的树的集合 森林与树概念相近,相互很容易转换. 6 .有序树、无序树 如果树中每棵子树从左向右的排列拥有一定的 顺序,不得互换,则称为有序树,否则称为无序树。
广度优先(按层次)遍历定义为:先访问第一层结点(即树根结点), 再从左至右访问第二层结点,依次按层访问 ……,直到树中结点全部被 访问为止。对图6-6 (a)中的树进行按层次遍历得到树的广度优先遍历序 列为:ABCDEFG。 说明: ① 前序遍历一棵树恰好等价于前序遍历该树所对应的二叉树。(6.2 节将介绍二叉树) ② 后序遍历树恰好等价于中序遍历该树所对应的二叉树。
2018/10/13 13
树的先序遍历算法描述如下: void Preorder(Btree *root) { if (root!=NULL) {printf(“%c\n”,root->data); //访问根结点 //先根遍历k叉树
for(i=0;i<k;i++)
preorder(root->t[i]); //递归前序遍历每一个子结点 }
祖父 家族关系表示: R={<祖父,伯父>,<祖父,父亲>,<祖父,叔父>, <伯父,堂兄>,<伯父,堂姐>,<父亲,本人>, <叔父,堂弟>,<堂兄,侄儿>}

《数据结构及其应用》笔记含答案 第五章_树和二叉树

《数据结构及其应用》笔记含答案 第五章_树和二叉树

第5章树和二叉树一、填空题1、指向结点前驱和后继的指针称为线索。

二、判断题1、二叉树是树的特殊形式。

()2、完全二叉树中,若一个结点没有左孩子,则它必是叶子。

()3、对于有N个结点的二叉树,其高度为。

()4、满二叉树一定是完全二叉树,反之未必。

()5、完全二叉树可采用顺序存储结构实现存储,非完全二叉树则不能。

()6、若一个结点是某二叉树子树的中序遍历序列中的第一个结点,则它必是该子树的后序遍历序列中的第一个结点。

()7、不使用递归也可实现二叉树的先序、中序和后序遍历。

()8、先序遍历二叉树的序列中,任何结点的子树的所有结点不一定跟在该结点之后。

()9、赫夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。

()110、在赫夫曼编码中,出现频率相同的字符编码长度也一定相同。

()三、单项选择题1、把一棵树转换为二叉树后,这棵二叉树的形态是(A)。

A.唯一的B.有多种C.有多种,但根结点都没有左孩子D.有多种,但根结点都没有右孩子解释:因为二叉树有左孩子、右孩子之分,故一棵树转换为二叉树后,这棵二叉树的形态是唯一的。

2、由3个结点可以构造出多少种不同的二叉树?(D)A.2 B.3 C.4 D.5解释:五种情况如下:3、一棵完全二叉树上有1001个结点,其中叶子结点的个数是(D)。

A.250 B. 500 C.254 D.501解释:设度为0结点(叶子结点)个数为A,度为1的结点个数为B,度为2的结点个数为C,有A=C+1,A+B+C=1001,可得2C+B=1000,由完全二叉树的性质可得B=0或1,又因为C为整数,所以B=0,C=500,A=501,即有501个叶子结点。

4、一个具有1025个结点的二叉树的高h为(C)。

A.11 B.10 C.11至1025之间 D.10至1024之间解释:若每层仅有一个结点,则树高h为1025;且其最小树高为⎣log21025⎦ + 1=11,即h在11至1025之间。

数据结构第5章课件 中国石油大学(华东)

数据结构第5章课件 中国石油大学(华东)
leftChild data rightChild
二叉链表
leftChild
data rightChild
22
二叉树的链表表示(三叉链表)
每个结点增加一个指向双亲的指针parent,使 得查找双亲也很方便。
leftChild data parent rightChild
三叉链表
data
leftChild
27
BinTreeNode *LeftChild (BinTreeNode *current ) { return (current != NULL )? current->leftChild :NULL; } BinTreeNode *RightChild (BinTreeNode *current ) { return ( current!= NULL) ? current->rightChild : NULL; } int Height( ){return Height(root);} int Size( ){return Size(root);} BinTreeNode *GetRoot ( ) const { return root; } void preOrder( ) {preOrder(root);} //前序遍历 void inOrder( ) {inOrder(root);} //中序遍历 void postOrder( ) {postOrder(root);} //后序遍历 void levelOrder( ) ; // 不需要递归,所以直接对外接 口调用即可。层序遍历 28
b
f
c
d
g
6
e
a
b.嵌套集合表示法: b 根据树的集合定义,写出集合划分。 { a, {b,{e},{f}}, {c}, {d,{g}} } e c d

第5章 树与二叉树习题参考答案【VIP专享】

第5章 树与二叉树习题参考答案【VIP专享】

2. 一棵具有 n 个结点的二叉树,其深度最多为 n ,最少为 [log2n]+1 。 3. 一棵具有 100 个结点的完全二叉树,其叶结点的个数为 50 。37 4. 以{5,9,12,13,20,30}为叶结点的权值所构造的哈夫曼树的带权路径长度是 217
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,通系电1,力过根保管据护线生高0不产中仅工资2艺料22高试2可中卷以资配解料置决试技吊卷术顶要是层求指配,机置对组不电在规气进范设行高备继中进电资行保料空护试载高卷与中问带资题负料2荷试2,下卷而高总且中体可资配保料置障试时2卷,32调需3各控要类试在管验最路;大习对限题设度到备内位进来。行确在调保管整机路使组敷其高设在中过正资程常料1工试中况卷,下安要与全加过,强度并看工且25作尽52下可22都能护可地1关以缩于正小管常故路工障高作高中;中资对资料于料试继试卷电卷连保破接护坏管进范口行围处整,理核或高对者中定对资值某料,些试审异卷核常弯与高扁校中度对资固图料定纸试盒,卷位编工置写况.复进保杂行护设自层备动防与处腐装理跨置,接高尤地中其线资要弯料避曲试免半卷错径调误标试高方中等案资,,料要编试求5写、卷技重电保术要气护交设设装底备备置。4高调、动管中试电作线资高气,敷料中课并设3试资件且、技卷料中拒管术试试调绝路中验卷试动敷包方技作设含案术,技线以来术槽及避、系免管统不架启必等动要多方高项案中方;资式对料,整试为套卷解启突决动然高过停中程机语中。文高因电中此气资,课料电件试力中卷高管电中壁气资薄设料、备试接进卷口行保不调护严试装等工置问作调题并试,且技合进术理行,利过要用关求管运电线行力敷高保设中护技资装术料置。试做线卷到缆技准敷术确设指灵原导活则。。:对对在于于分调差线试动盒过保处程护,中装当高置不中高同资中电料资压试料回卷试路技卷交术调叉问试时题技,,术应作是采为指用调发金试电属人机隔员一板,变进需压行要器隔在组开事在处前发理掌生;握内同图部一纸故线资障槽料时内、,设需强备要电制进回造行路厂外须家部同出电时具源切高高断中中习资资题料料电试试源卷卷,试切线验除缆报从敷告而设与采完相用毕关高,技中要术资进资料行料试检,卷查并主和且要检了保测解护处现装理场置。设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

第五章二叉树

第五章二叉树

树为空
树为空
根的左右子 树都不空
二、二叉树的性质
第1层(根) 第2层 第3层
第4层
1、若层次从1开始,则第i层最多有2 i-1个结点 2、高度为h的二叉树最多有2h -1个结点 3、任何一棵二叉树,若叶子结点数为n0,度为2的结点数 为n2,则n0 = n2 + 1
5.2.2 二叉树的性质
二叉树具有下列重要性质: 性质1: 在二叉树的第i层上至多有2i-1个结点(i>=1)。
二叉树的二叉链表存储表示
Elem val(){return data;} void setVal(const Elem e){data=e;} inline BinTreeNode<Elem>* left(){return lchild;} inline BinTreeNode<Elem>* right(){return rchild;} void setLeft(BinTreeNode<Elem>* left){lchild=left;} void setRight(BinTreeNode<Elem>* right){rchild=right;} bool isLeaf()
Elem data; BinTreeNode * lchild; BinTreeNode * rchild; public:
BinTreeNode(){lchild=rchild=NULL;} BinTreeNode(Elem e,BinNodePtr*l=NULL,
BinNodePtr*r=NULL) {data=e; lchild=l; rchild=r;} ~BinTreeNode(){}
n0,度为2的结点数为n2,则n0=n2+1。

《数据结构与算法设计》第5章 树

《数据结构与算法设计》第5章 树

5.2.2 二叉树的性质
➢ 满二叉树和完全二叉树
满二叉树是指深度为h且节点数取得最大值2h-1的二叉树。 如果一棵深度为h的二叉树,除第h层外,其他每层的节点数 都达到最大,且最后一层的节点自左而右连续分布,这样的二 叉树称为完全二叉树。
5.2.2 二叉树的性质
5.2.2 二叉树的性质
性质6 对含有n个节点的完全二叉树自上而下、同一层从左往右 对节点编号0,1,2,…,n-1,则节点之间存在以下关系: (1)若i=0,则节点i是根节点,无双亲;若i>0,则其双亲节 点的编号为i/2-1; (2)若2×i +1≤n,则i的左孩子编号为2×i+1; (3)若2×i+2≤n,则i的右孩子编号为2×i+2; (4)若i>1且为偶数,则节点i是其双亲的右孩子,且有编号为 i-1的左兄弟; (5)若i<n-1且为奇数,则节点i是其双亲的左孩子,且有编号 为i+1的右兄弟。
5.3.3 二叉树的二叉链表类模板定义
//根据二叉树的先序遍历序列和中序遍历序列创建以r为根的二叉树
void CreateBinaryTree(BTNode<DataType> * &r, DataType pre[], DataType
in[], int preStart, int preEnd, int inStart, int inEnd); int Height(BTNode<DataType> *r); //求以r为根的二叉树高度 //求以r为根的二叉树中叶子节点数目
5.1.2 树的术语
(9)节点的层次:从根节点开始,根为第一层,根的孩子为 第二层,根的孩子的孩子为第三层,依次类推,树中任一节 点所在的层次是其双亲节点所在的层次数加1。 (10)堂兄弟:双亲在同一层的节点互为堂兄弟。

第5章+树与二叉树习题解析(答)

第5章+树与二叉树习题解析(答)

习题五树与二叉树一、选择题1、一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足。

A、所有的结点均无左孩子B、所有的结点均无右孩子C、只有一个叶子结点D、是任意一棵二叉树2、一棵完全二叉树上有1001个结点,其中叶子结点的个数是。

A、250B、500C、254D、505E、以上答案都不对3、以下说法正确的是。

A、若一个树叶是某二叉树前序遍历序列中的最后一个结点,则它必是该子树后序遍历序列中的最后一个结点B、若一个树叶是某二叉树前序遍历序列中的最后一个结点,则它必是该子树中序遍历序列中的最后一个结点C、在二叉树中,具有两个子女的父结点,在中序遍历序列中,它的后继结点最多只能有一个子女结点D、在二叉树中,具有一个子女的父结点,在中序遍历序列中,它没有后继子女结点4、以下说法错误的是。

A、哈夫曼树是带权路径长度最短得数,路径上权值较大的结点离根较近B、若一个二叉树的树叶是某子树中序遍历序列中的第一个结点,则它必是该子树后序遍历序列中的第一个结点C、已知二叉树的前序遍历和后序遍历并不能唯一地确定这棵树,因为不知道树的根结点是哪一个D、在前序遍历二叉树的序列中,任何结点其子树的所有结点都是直接跟在该结点之后的5、一棵有124个叶结点的完全二叉树,最多有个结点。

A、247B、248C、249D、250E、2516、任何一棵二叉树的叶结点在前(先)序、中序和后序遍历序列中的相对次序。

A、不发生变化B、发生变化C、不能确定7、设a、b为一棵二叉树上的两个结点。

在中序遍历时,a在b前面的条件是。

A、a在b的右方B、a在b的左方C、a是b的祖先D、a 是b的子孙8、设深度为k的二叉树上只有度为0和度为2的结点,则这类二叉树上所含的结点总数为。

A、不确定B、2kC、2k-1D、2k+19、设有13个值,用它们组成一棵哈夫曼树,则该哈夫曼树共有个结点。

A、13B、12C、26 D、2510、下面几个符号串编码集合中,不是前缀编码的是。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 2 4 8 9 10 5 11 6 3 7 4 15 8 9 10 2 5 6 1 3 7
12
13
14
(a) 满二叉树
(b) 完全二叉树
24
完全二叉树是满二叉树的一部分,而满二叉树是完 全二叉树的特例。
性质4:n个结点的完全二叉树的深度为:㏒2n +1。
其中符号: x表示不大于x的最大整数。 x 表示不小于x的最小整数。
+
* a b
c d
*
/
f
e
8
树的表示方式
A D K L F C G E B H M J I
B A
A B E K L F C
C D
G D
J
嵌套集合
K
E
F
G
H
I
H M I J
L
M
树形表示
凹入表示
(A(B(E(K,L),F),C(G),D(H(M),I,J)))
广义表
9
5.1.2 树的基本术语
——包含一个数据元素和若干指向其子树的分支。 结点 结点的度 ——结点拥有的子树数 结点的层次 ——从根到该结点的层数(根结点算第一层) ——即度为0的结点,也称为终端结点 叶子 分支结点 ——即度不为0的结点,也称为非终端结点 树的度 ——树内所有结点度的最大值 树的深度 ——指树中所有结点的最大层次数,也称为高度 层次
3
5.1.1 树的定义
树是n(n≥0)个结点的有限集
n=0的树称为空树。
E B
A
C
D
F
G
H
I
J
任意一棵非空树,满足: K M L ① 有且只有一个称为根的 T1 T2 T3 结点(root); ② 当n>1时,除根结点外的结点可分为 m(m>0)个互不 相交的有限集T1 , T2 ,…, Tm。且每一集合本身又 是一棵树,称其为根的子树。每棵子树的根结点是 整棵树根结点的后继,整棵树的根结点是每棵子树 根结点的前驱。
由于二叉树每个结点的度最大为2,故在第i层上最大结 点数为第i-1层上最大结点数的2倍,即: 2×2i-2=2i-1 故命题成立。
20
性质2:深度为k的二叉树至多有2k-1个结点(k≧1) 。 证明:
深度为k的二叉树的最大的结点数为二叉树中每层 上的最大结点数之和。 由性质1知,二叉树的第1层、第2层、⋯、第k层上 的结点数至多有: 20、21 、 …、2k-1 。
∴ 总的结点数至多有: 20+21+ …+2k-1=2k-1
1 2 3
4
8 9 10
5
11 12
6 13 14
7
15
21
性质3:对任何一棵二叉树,若其叶子结点数为n0,度
为2的结点数为n2,则n0=n2+1。
证明:
设二叉树中度为1的结点数为n1,二叉树中总结点 数为N,因为二叉树中所有结点均小于或等于2,则有: N=n0+n1+n2 再看二叉树中的分支数:除根结点外,其余每个结 点都有唯一的一个进入分支,设B为二叉树中的分支总 数,则有:N=B+1,而所有这些分支都是由度为1和2的 结点射出的,即:B=n1+2n2 1 ∴ N=B+1=n1+2n2+1 2 ∴ n0+n1+n2=n1+2n2+1 即 n0=n2+1 4 3
(e)
(a) 空二叉树
(b) 单结点二叉树
(c) 右子树为空
(d) 左子树为空
(e) 左、右子树都不空
二叉树在树结构中起着非常重要的作用。因为二叉 树结构简单,存储效率高,操作算法相对简单,且任何 树都很容易转化成二叉树结构。 有关树的术语都适用于二叉树。
练习
具有3个结点的二叉树可能有几种不同形态? 普通树呢? 5种/2种
//根据LR为0或1,将二叉树c(右子树为空)插入成为T中p结点的 //左或右子树,p的原有左或右子树成为c的右子树
DeleteChild( &T, p, LR)
//根据LR为0或1,删除T中p结点的左或右子树 Root(T); //返回二叉树 T的根 Assign ( T, &e, value); //结点e赋值为value Value( T, e, ); //返回e 结点的值 PreOrderTraverse ( T ); //先序遍历T InOrderTraverse ( T ); //中序遍历T PostOrderTraverse ( T ); //后序遍历T LevelOrderTraverse ( T ); //层序遍历T
27
当i=j+1时,由完全二叉树的定义知,若结点i的左 孩子结点存在,则其左孩子结点的编号一定等于编号 为j的右孩子的编号加1,即结点 i 的左孩子的编号为: (2j+1)+1=2(j+1)=2i 且有2i≦n。相反,若2i>n,则左孩子结点不存在。 同样地,若结点i的右孩子结点存在,则其右孩子 的编号为:2i+1,且有2i+1≦n。若2i+1>n,则左孩子 结点不存在。结论(2)和(3)得证。
⑵ 若n>1时,其余的结点被分成为二个互不相交的 子集 T1,T2,分别称之为左、右子树,并且左、右 子树又都是二叉树。 由此可知,二叉树的定义是递归的。 与树的区别: ①二叉树每个结点最多只有两棵子树 ②二叉树的子树有左右之分
二叉树的基本形态
二叉树有5种基本形态:
A
A A A
(a)
(b)
(c)
(d)
22
满二叉树:
一棵深度为k且有2k-1个结点的二叉树称为满二 叉树(Full Binary Tree)。
满二叉树的特点: 每一层上的结点数都是最大结点数。 可对满二叉树的结点进行连续编号,从根结点为1 开始,按“自上而下、自左至右”的原则进行。
1 2 3
4
8 9 10
5
11 12
6 13 14
7
15
第5 章
树和二叉树
1
教学目标
1. 掌握二叉树的基本概念、性质和存储结构 2. 熟练掌握二叉树的前、中、后序遍历方法
3. 了解线索化二叉树的思想
4. 了解:森林与二叉树的转换,树的遍历方法
2

5.1 5.2 5.3 5.4 5.5 5.6

树和二叉树的定义 树和二叉树的抽象数据类型定义 二叉树的性质和存储结构 遍历二叉树与线索二叉树 树和森林 应用实例---利用二叉树求解表达式的值
A
B
C
D
E
F
G
H
I
J
K
L
M
11
森林 ——指m (m≥0)棵互不相交的树的集合
有序树 ——结点各子树从左至右有序,不能互换(左为第一) 无序树 ——结点各子树可互换位置。
B
C
D
B
A
E
F
G
H M
I
J
E
C
D
F
G
H
I
Hale Waihona Puke JKLK
L
M
12
5.1.3
二叉树的定义
二叉树的定义
二叉树(Binary tree)是n(n≥0)个结点的有限集合。 若n=0时称为空树,否则: ⑴ 有且只有一个称之为根(Root)的结点;
16
基本操作 P: InitTree( &T ); //初始化树 DestroyTree(&T); //销毁树 ClearTree(&T); //清空树 CreateTree(&T, definition ); //按definition建立树 TreeEmpty (T); //判断树是否为空 TreeDepth (T); //求树的深度 Root(T); //返回T的根 Assign ( T, &e, value); //结点e赋值为value Value( T, e, ); //返回e 结点的值 Parent(T, e); //返回e结点的双亲 LeftChild(T, e) ; //返回 e结点的最左孩子 RightSibling(T, e); //返回 e结点的右兄弟 InsertChild( &T, p, i, c); //将树c插入成为树T中p结点的第i棵子树 DeleteChild( &T, p, i); //删除树T中p结点的第i棵子树 TraverseTree( T ); //按某种次序遍历树 }ADT Tree
17
二叉树的抽象数据类型定义
ADT BinaryTree{ 数据对象D: D是具有相同特性的数据元素的集合。 数据关系R: 若D=Φ,则R= Φ ,称该二叉树为空二叉树; 若D≠Φ,则R= {H},H是如下二元关系: ①在D中存在唯一的称为根的元素root,它无前驱。 ②除根以外,其余结点有且仅有一个前驱结点; ③所有结点最多可以有两个后继, 分别称为根的左 孩子与右孩子。 基本操作 P: InitBiTree( &T ); //初始化二叉树 T DestroyBiTree(&T) //销毁二叉树 T ClearBiTree(&T) //清空二叉树 T CreateBiTree(&T, definition ); //按definition建立二叉树 T BiTreeEmpty (T); //判断二叉树 T是否为空 BiTreeDepth (T); //求二叉树 T的深度
15
5.2 树和二叉树的抽象数据类型定义
树的抽象数据类型定义
ADT Tree{ 数据对象D: D是具有相同特性的数据元素的集合。 数据关系R: 若D为空集,则称为空树; 若D中仅含一个数据元素,则R为空集; 其他情况下的R存在如下二元关系: ①有且仅有一个结点没有前驱,此结点称为根。 ②除根以外,其余结点有且仅有一个前驱结点。 ③所有结点可以有任意多个(含0个)后继。
相关文档
最新文档