ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:411.30KB ,
资源ID:4550944      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4550944.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构树培训讲学.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构树培训讲学.docx

1、数据结构树培训讲学数据结构(树)数据结构与算法上机作业第三章 树一、选择题1、在一棵树中,如果结点A有3个兄弟,B是A的双亲,则B的度为 D A. 1 B. 2 C. 3 D. 42、深度为h的完全二叉树至少有 D 个结点,至多有 B 个结点 A. 2h B. 2h-1 C. 2h+1 D. 2h-13、具有n个结点的满二叉树有 C 个叶结点。 A. n/2 B. (n-1)/2 C. (n+1)/2 D. n/2+14、一棵具有25个叶结点的完全二叉树最多有 C 个结点。 A. 48 B. 49 C. 50 D. 515、已知二叉树的先根遍历序列是ABCDEF,中根遍历序列是CBAEDF,则

2、后根遍历序列是 A 。 A. CBEFDA B. FEDCBA C. CBEDFA D. 不定6、具有10个叶结点的二叉树中有 B 个度为2的结点。 A. 8 B. 9 C. 10 D. 117、一棵非空二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足 B 。 A. 所有非叶结点均无左孩子 B. 所有非叶结点均无右孩子 C. 只有一个叶子结点 D. A和B同时成立8、在线索二叉树中,t所指结点没有左子树的充要条件是 D 。 A. t-left=NULL B. t-ltag=TRUE C. t-ltag=TRUE且t-left=NULL D. 以上都不对9、n个结点的线索二叉树上含

3、有的线索数为 C 。 A. 2n B. n-1 C. n+1 D. n10、二叉树按照某种顺序线索化后,任一结点都有指向其前驱和后继的线索,这种说法 B 。 A. 正确 B. 错误 C. 不确定 D. 都有可能11、具有n(n1)个结点的完全二叉树中,结点i(2in)的左孩子结点是 D 。 A. 2i B. 2i+1 C. 2i-1 D. 不存在12、具有64个结点的完全二叉树的深度为 C 。 A. 5 B. 6 C.7 D. 813、将一颗有100个结点的完全二叉树从上到下、从左到右一次对结点进行编号,根结点的编号为1,则编号为45的结点的右孩子的编号为 D 。 A. 46 B. 47 C.

4、 90 D. 9114、在结点数为n的堆中插入一个结点时,复杂度为 C 。 A. O(n) B. O(n2) C. O(log2n) D. O(logn2)15、两个二叉树是等价的,则它们满足 D 。 A. 它们都为空 B. 它们的左右子树都具有相同的结构 C. 它们对应的结点包含相同的信息 D. A、B和C16、包含n个元素的堆的高度为 C 。(符号a表示取不小a最小整数) A. n B. log2n C. log2(n+1) D. n+117、以下说法错误的是 B 。 A. 存在这样的二叉树,对其采用任何次序的遍历其结点访问序列均相同 B. 二叉树是树的特殊情形 C. 由树转换成二叉树,其

5、根结点的右子树总是空的 D. 在二叉树中只有一棵子树的情形下,也要指出是左子树还是右子树18、设F是一个森林,B是由F变换得到的二叉树。若F中有n个非终端结点,则B中没有右孩子的结点有 C 个。 A. n-1 B. n C. n+1 D. n+219、将一棵树T转换为二叉树B,则T的后根序列是B的 B 。 A. 先根序列 B. 中根序列 C. 后根序列 D. 层次序列20、将一棵树转换为二叉树后,这颗二叉树的形态是 B 。 A. 唯一的,根结点没有左孩子 B. 唯一的,根结点没有右孩子 C. 有多种,根结点都没有左孩子 D. 有多种,根结点都没有右孩子21、设树T的度为4,其中度为1, 2,

6、3, 4的结点个数分别为4, 2, 1, 1,则T中的叶结点的个数为 D 。 A. 5 B. 6 C. 7 D. 822、设森林F中有三棵树,第一、第二、第三棵树的结点个数分别为M1, M2, M3。与森林F对应的二叉树根结点的右子树上的结点个数为 D 。 A. M1-1 B. M1+M2 C. M2 D. M2+M323、若以二叉树的任一结点出发到根的路径上所经过的结点序列按其关键字有序,则该二叉树是 C 。 A. 二叉排序树 B. 哈夫曼树 C. 堆 D. 线索二叉树24、用5个权值3, 2, 4, 5, 1构造的哈夫曼树的带权路径长度是 C 。 A. 32 B. 33 C. 34 D.

7、15二、填空题1、一棵二叉树有67个结点,结点的度是0和2。问这棵二叉树中度为2的结点有 33 个。2、含A, B, C三个结点的不同形态的二叉树有 0 棵。3、含有4个度为2的结点和5个叶子结点的完全二叉树,有 1 个度为1的结点。4、具有100个结点的完全二叉树的叶子结点数为 50 。5、在用左右链表示的具有n个结点的二叉树中,共有 2n 个指针域,其中 n-1 个指针域用于指向其左右孩子,剩下的 n+1 个指针域是空的。 6、如果一颗完全二叉树的任意一个非终结结点的元素都 大于等于 其左儿子结点和右儿子结点(如果有的话)的元素,则称此完全二叉树为最大堆。7、堆是一种特殊形式的 完全二叉树

8、 二叉树,对于最大堆而言,其根结点的元素的值应该是所有结点元素中 最大的 的。8、二叉树的复制是指按照一棵已知的二叉树复制一个副本,使两者 等价 。复制二叉树最长用的方法是 后根遍历递归算法 。9、在定义堆时,通常采用 数组 方式定义相应的二叉树,这样可以很容易实现其相关操作。10、在构建选择树时,根据孩子结点的获胜者确定他们双亲结点所得到的选择树称为 胜者树 。根据孩子结点的失败者确定他们双亲结点所得到的选择树称为 败者树 。11、树的表示方法包括 数组 、 邻接表 和 左右链 。12、表达式(a+b*(c-d)-e/f的波兰式(前缀式)是 -+a*b-cd/ef ,逆波兰式(后缀式)是 a

9、bcd-*+e/f- 。13、设F是由T1、T2、T3三棵树组成的森林,与F对应的二叉树为B。已知T1, T2, T3的结点数分别为n1, n2和n3,则二叉树B的左子树中有 n1-1 个结点,二叉树B的右子树中有 n2+n3 个结点。14、设二叉树的中根序列为ABCDEFG,后根序列为BDCAFGE。则该二叉树的先根序列为EGCBDGF 。该二叉树对应的森林中包含 2 棵树。15、先根次序遍历森林等同于按 先根 遍历对应的二叉树,后根次序遍历森林等同与按 中根 遍历对应的二叉树。16、一棵哈夫曼树有19个结点,则其叶子结点的个数为 10 。17、设有数据WG=7, 19, 2, 6, 32,

10、 3, 21, 10叶节点权重集合,则所构建哈夫曼树的高是 6 ,带权路径长度WPL为 261 。18、设有一份电文中共使用6个字符a, b, c, d, e, f,其中出现频率依次为2,3,4,7,8,19,则字符c的哈夫曼编码是 001 ,电文编码的总长度为 96 。20、在有n个结点的哈夫曼树中,叶子结点总数为 (n+1)/2 ,非叶结点的总数为 (n-1)/2 。三、试分别画出具有4个结点的二叉树的所有不同形态。四、已知一棵二叉树的中根序列和后根序列分别是BDCEAHFG和DECBHGFA,请画出此二叉树。五、已知非空二叉树T,写一个算法,求度为2的结点的个数。要求: 1、定义二叉树的

11、抽象数据类型和型BTREE,并定义基本操作。 2、编写函数count2(BTREE T),返回度为2的节点的个数。 3、在主函数中,构建一个二叉树,并验证所编写的算法。六、用递归方法写一个算法,求二叉树的叶子结点数int leafnum(BTREE T)。要求:1、定义二叉树的抽象数据类型和型BTREE,并定义基本操作。2、编写函数leafnum(BTREE T),返回树T的叶子节点的个数。在主函数中,构建一个二叉树,并验证所编写的算法。七、画出下图所表示的二叉树的中序线索二叉树和先序线索二叉树。 八、已知二叉树的先根序列是AEFBGCDHIKJ,中根序列是EFAGBCHKIJD,画出此二叉树

12、,并画出后序线索二叉树。九、在中序线索二叉树中插入一个结点Q作为树中某个结点P的左孩子,试给出相应的算法。要求:1、定义中序线索二叉树的型THTREE以及基本操作。2、定义函数void LInsert(THTREE P, THTREE Q); 实现题目要求的操作。在主函数中,利用操作RInsert和LInsert构造一个线索二叉树,并中序输出二叉树的结点的元素,验证结果。十、假设现在有如下的元素:7、16、49、82、5、31、6、2、44。画出将每一个元素插入堆中以后的最大堆。要求:利用基本操作Insert的基本原理,先用第一个元素7构成一个二叉树,然后将第二个元素16插入该二叉树中,再将第

13、三个元素49插入堆中,直到最后一个元素插入为止。上述过程要求画图完成。十一、编写一个函数,在最大堆中查找任意元素,并分析其时间复杂度。要求:1、定义最大堆的型HEAP及其基本操作。2、定义函数int Find(HEAP H, Elementtype e),查找e是否为堆的元素,如果是,返回该元素在堆中的位置,如果不是,返回0。(提示:利用最大堆的元素特点进行查找,可降低复杂度)在主函数中首先构建一个二叉树,然后验证所构造的函数。十二、给定叶子结点的权值集合15, 3,14, 2, 6, 9, 16, 17,构造相应的哈夫曼树,并计算其带权路径长度。十三、已知n=9和一组等价关系: 15、68、

14、72、98、37、42、93 试应用抽象数据类型MFSET设计一个算法,按输入的等价关系进行等价分类。十四、画出下图所示的森林经转换后所对应的二叉树,并指出在二叉树中某结点为叶子结点时,所对应的森林中结点应满足的条件。十五、已知森林F的先根序列为:ABCDEFGHIJKL,后根序列为:CBEFDGAJIKLH,试画出森林F。提示:先画出森林F所对应的二叉树B,然后再将B转换为森林。十六、画出表达式(A+B*C/D)*E+F*G所对应的树结构,并写出该表达式的波兰表示式和逆波兰表示式。十七、利用逆波兰表达式求一个四则混合元算的值。具体要求:1、定义二叉树的型BTREE和位置的型position。

15、2、实现二叉树的基本操作。3、实现将一个四则混合运算转换成二叉树的函数:BTREE convert(char *express),其中参数express为四则混合运算表达式,返回值为生成的树。4、实现计算四则混合运算的值的函数:double computer(BTREE bt),其中,参数bt为四则运算所对应的树,返回值为计算结果。提示:先求树的的波兰表达式,然后利用栈结构计算表达式的值。在主函数中进行测试,求2+3*(5+8)/4-5的值。要求:1、上述作业要求在单独完成;2、完成后,于规定期限内提交到ftp服务器的相应目录中中,注意,在提交时将所编写的程序统一拷贝到一个Word文件中,文件

16、名格式为“学号+姓名”三四五、六代码#includeusing namespace std;typedef char datatype;struct node node *lchild; datatype data; node *rchild;typedef node *BTREE;void CreateBTREE(BTREE &BT,char *&str)/先根输入树 char ch; ch=*str+; if(ch=#) BT=NULL; else BT=new node; BT-data=ch; CreateBTREE(BT-lchild,str); CreateBTREE(BT-rch

17、ild,str); void Empty(BTREE BT) BT=NULL;bool IsEmpty(BTREE BT)/判断是否为空 if(BT=NULL) return true; else return false;BTREE CreateBT(datatype v,BTREE ltree,BTREE rtree)/用左右子树建立二叉树 BTREE root; root=new node; root-data=v; root-lchild=ltree; root-rchild=rtree; return root;BTREE Lchild(BTREE BT)/返回左子树 return

18、BT-lchild;BTREE Rchild(BTREE BT)/返回右子树 return BT-rchild;datatype Data(BTREE BT)/返回节点元素值 return BT-data;void visit(datatype dt) coutlchild)&(BT-rchild) return 1+count2(Lchild(BT)+count2(Rchild(BT); if(BT-lchild)&(BT-rchild=NULL) return count2(Lchild(BT); if(BT-lchild=NULL)&(BT-rchild) return count2(R

19、child(BT); int leafnum(BTREE BT) static int count=0; if(BT-lchild=NULL&BT-rchild=NULL) return +count; else leafnum(Lchild(BT); leafnum(Rchild(BT); int main() BTREE BT=NULL; char *str=abc#d#ef#g#; CreateBTREE(BT,str); cout度为2的节点的个数:count2(BT)endl; cout叶子节点个数:leafnum(BT)endl;七中序线索二叉树先序线索二叉树八二叉树后序线索二叉树

20、九#includeusing namespace std;typedef char datatype;struct node node *lchild; node *rchild; bool ltag; bool rtag; datatype data;typedef node *THTREE;THTREE InPre(THTREE P)/求中序前驱(右子树的最左节点) THTREE Q=P-lchild; if(P-ltag=true) while(Q-rtag=true) Q=Q-rchild; return Q;THTREE InNext(THTREE P)/求中序后继(左子树的最右节点

21、) THTREE Q=P-rchild; if(P-rtag=true) while(Q-ltag=true) Q=Q-lchild; return Q;/二叉树中插入一个结点Q作为树中某个结点P的左孩子void LInsert(THTREE P,THTREE Q) THTREE W; Q-lchild=P-lchild; Q-ltag=P-ltag; Q-rchild=P; Q-rtag=false; P-lchild=Q; P-ltag=true; if(Q-ltag=true)/如果P节点有左孩子 W=InPre(Q); W-rchild=Q; void RInsert(THTREE P

22、,THTREE Q) THTREE W; Q-rchild=P-rchild; Q-rtag=P-rtag; Q-lchild=P; Q-ltag=false; P-rchild=Q; P-rtag=true; if(Q-rtag=true)/如果P节点有右孩子 W=InNext(Q); W-lchild=Q; void ThInOrder(THTREE HEAD) THTREE temp; temp=HEAD; do temp=InNext(temp); if(temp!=HEAD) coutdata); while(temp!=HEAD); int main() node *HEAD=ne

23、w node; node *A=new node; HEAD-data=!; A-data=A; HEAD-lchild=A; HEAD-rchild=HEAD; HEAD-ltag=true; HEAD-rtag=true; A-lchild=HEAD; A-rchild=HEAD; A-ltag=false; A-rtag=false; node *B=new node; B-data=B; node *C=new node; C-data=C; node *D=new node; D-data=D; node *E=new node; E-data=E; node *F=new node

24、; F-data=F; node *G=new node; G-data=G; LInsert(A,B); RInsert(A,C); LInsert(B,D); RInsert(B,E); LInsert(C,F); RInsert(C,G); ThInOrder(HEAD);十26315824971644263158249716十一#include#define MaxSize 200using namespace std;typedef struct int data;Elementtype;typedef struct Elementtype elementsMaxSize; int

25、n;HEAP;void MaxHeap(HEAP &heap)/创建一个空堆 heap.n=0;bool HeapEmpty(HEAP heap)/判断是否为空堆 return (!heap.n); bool HeapFull(HEAP heap)/判断是否满堆 return(heap.n=MaxSize-1);void Insert(HEAP &heap,Elementtype element)/最大堆插入一个元素 int i; if(!HeapFull(heap) i=+heap.n; while(i!=1&(element.dataheap.elementsi/2.data) heap.

26、elementsi=heap.elementsi/2; i/=2; heap.elementsi=element;Elementtype DeleteMax(HEAP &heap)/删除堆中的最大元素 int parent=1,child=2; Elementtype element,tmp; if(!HeapEmpty(heap) element=heap.elements1; tmp=heap.elementsheap.n-; while(child=heap.n) if(childheap.n)&(heap.elementschild.data=heap.elementschild.data) break; heap.elementsparent=heap.elementschild; parent=child; child*=2; heap.elementsparent=tmp; return element; int Find(HEAP &H,Elementtype e)/查找e是否为堆中元素 int i=H.n,j; if(e.data=H.elements1.data) return 1; if(i!=0) if(e.data=H.elementsi.data) return i; else if(e.dataH.elementsi/2.data)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1