




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. 具有具有n个顶点的二叉树,共有多少边?个顶点的二叉树,共有多少边?2、若一个具有、若一个具有n个顶点,个顶点,k条边的无向图是一个森林条边的无向图是一个森林(nk),那么该森林有多少棵树?,那么该森林有多少棵树?3、已知一棵度为、已知一棵度为m的树中有的树中有n1个度为个度为1的节点,的节点,n2个个度为度为2的节点,的节点, nm个度为个度为m的节点。问该树有的节点。问该树有多少叶子节点?多少叶子节点?4、层数为、层数为k的二叉树中,最大和最小节点数各为多少?的二叉树中,最大和最小节点数各为多少?5、有、有n个节点的二叉树中,有个节点的二叉树中,有m个叶子节点,问非叶个叶子节点,问非叶
2、子节点中度为子节点中度为2和度为和度为1的节点各有多少?的节点各有多少?n-1nkn0 = n2+ 2n3+ + (m-1)nm+12k-1, kn2 = m-1; n1=n-2m +1bcb1. 假定一棵树的广义表示为假定一棵树的广义表示为(a(b(c,d(e,f,g),h(i,j),则树中所含的结点数为,则树中所含的结点数为 ( )个,树的)个,树的深度为(深度为( )个,树的度为)个,树的度为 ( )。)。 32、在哈夫曼编码中,若编码长度只允许小于等于、在哈夫曼编码中,若编码长度只允许小于等于4,则除了已对两个字符编码为则除了已对两个字符编码为0和和10外,还可以最多外,还可以最多对(
3、对( ) 个字符编码个字符编码.43、一颗二叉树的前序遍历序列为、一颗二叉树的前序遍历序列为aebdc,后序遍历序,后序遍历序列为列为bcdea,根节点的孩子节点,根节点的孩子节点a.a.只有只有e b. ee b. e和和b b c. e c. e和和c d. c d. 不确定不确定a104 试问利用树的先根次序遍历结果和试问利用树的先根次序遍历结果和后根次序遍历结果能否唯一确定一后根次序遍历结果能否唯一确定一棵树棵树?1、树的先根次序遍历的结果与其对应二叉树的前序遍、树的先根次序遍历的结果与其对应二叉树的前序遍历结果相同历结果相同 2、树的后根次序遍历结果与其对应二叉树的中序遍历、树的后根
4、次序遍历结果与其对应二叉树的中序遍历结果相同结果相同;3、对于二叉树而言,先序遍历和中序遍历可以确定一、对于二叉树而言,先序遍历和中序遍历可以确定一个二叉树,个二叉树,因此,树的先根次序遍历结果和后根次序遍历结果能因此,树的先根次序遍历结果和后根次序遍历结果能唯一确定一棵树唯一确定一棵树 用二叉链表作为二叉树的存储表示,统计二叉树中用二叉链表作为二叉树的存储表示,统计二叉树中叶结点的个数,请完成下列递归程序叶结点的个数,请完成下列递归程序 。int leaf (bitnode * ptr ) if ( ) return 0;else if ( ptr-lchild = null & ptr-r
5、child = null ) return 1;else return + ; typedef struct bitnode / 结点结构结点结构 telemtype data; struct bitnode *lchild, *rchild; / 左右孩子指针左右孩子指针 bitnode, *bitree;ptr = nullleaf ( ptr-lchild )leaf ( ptr-rchild ) 二叉树的双序遍历二叉树的双序遍历(double-order traversal)是指:对是指:对于二叉树的每一个结点来说,先访问这个结点,再于二叉树的每一个结点来说,先访问这个结点,再按双序遍
6、历它的左子树,然后再一次访问这个结点,按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树。试写出执行这种双接下来按双序遍历它的右子树。试写出执行这种双序遍历的算法。序遍历的算法。 void double_order ( bitnode *current ) if ( current != null ) printf(“%f,”, current-data); ; printf(“%f,”, current-data); double_order ( current-rchild ); double_order ( current-rchild ) 已知一棵具有已知一棵具有
7、n个结点的个结点的完全二叉树完全二叉树被顺序存储于一被顺序存储于一维数组的维数组的a1an元素中,试找出编号为元素中,试找出编号为i的结点的结点的双亲和所有孩子。假设每一个元素用一个整数表的双亲和所有孩子。假设每一个元素用一个整数表示。完成下列程序示。完成下列程序void request(int a, int n, int i) /从数组从数组a中打印出编号为中打印出编号为i的结点的双亲和孩子的结点的双亲和孩子 if( ) exit(1); printf(current element:%f”, ai); int j=i/2; /下标为下标为j的结点是下标为的结点是下标为i结点的双亲结点的双亲
8、 if( ) printf(“parent:%f”,aj); else prinf(“no parent!); if( ) printf(left child:%f”,a2*i); printf(right child:%f“,a2*i+1; else if( ) printf(left child:%f,a2*i); printf(no right child!; else printf(no children!“); inj02*ilchild; b-lchild = b-rchild; b-rchild =t; swap(b-lchild ); swap(b-rchild );交换左右子
9、树交换左右子树 请指出下列函数的功能请指出下列函数的功能void preserve(bitnode *b, elemtype a, int n) static int i = 0; if(b != null) preserve(b-lchild, a,n); ai+ = b-data; preserve(b-rchild, a,n); 得到二叉树得到二叉树b的中序遍历序列,结果放在数组的中序遍历序列,结果放在数组a中中根据根据_可以唯一地确定一棵二叉树。可以唯一地确定一棵二叉树。 a. a. 先序遍历和后序遍历先序遍历和后序遍历 b. b. 先序遍历和层次遍历先序遍历和层次遍历 c. c. 中
10、序遍历和层次遍历中序遍历和层次遍历 d. d. 中序遍历和后序遍历中序遍历和后序遍历d. d. 中序遍历和后序遍历中序遍历和后序遍历 所有分支结点的度为所有分支结点的度为2 2的二叉树称为正则二叉树,的二叉树称为正则二叉树,试用二叉链表做存储结构,编写一递归函数试用二叉链表做存储结构,编写一递归函数int int formaltree(bitree t)formaltree(bitree t),判断二叉树是否为正则二叉,判断二叉树是否为正则二叉树。树。int formaltree(bitree t) if (t = null) return 1; if (t-lchild = null) &
11、(t-rchild = null) return 1; if (t-lchild = null) | (t-rchild = null) return 0; return (formaltree(t-lchild) & (formaltree(t-rchild); 下面不能唯一确定一棵二叉树的两个遍历序列是下面不能唯一确定一棵二叉树的两个遍历序列是_。a)a)先序序列和中序序列先序序列和中序序列 b)b)先序序列和后序序列先序序列和后序序列c)c)后序序列和中序序列后序序列和中序序列 c)c)都不能都不能在树的孩子兄弟表示法中,二叉链表的左指针指向在树的孩子兄弟表示法中,二叉链表的左指针指向_
12、,右指针指向,右指针指向_。b) 先序序列和后序序列先序序列和后序序列第一个孩子第一个孩子下一个兄弟下一个兄弟在二叉链表的每个结点中添加一个域在二叉链表的每个结点中添加一个域int depthint depth,表示,表示以该结点为根的子树的深度,即:以该结点为根的子树的深度,即:typedef struct bitnode typedef struct bitnode / / 结点结构结点结构 telemtype data;telemtype data; struct bitnode struct bitnode * *lchild,lchild,* *rchild;/rchild;/左右孩
13、子指针左右孩子指针 int depth; /int depth; /以该结点为根的子树的深度以该结点为根的子树的深度 bitnode, bitnode, * * bitree; bitree; a. a. 试编写一递归函数试编写一递归函数bitreedepth( bitree t )bitreedepth( bitree t ),计算二叉树计算二叉树t t中每个结点的中每个结点的depthdepth值,函数的返回值为值,函数的返回值为树树t t的深度。的深度。 b. b. 在在a a的基础上(即已求出二叉树中每个结点的的基础上(即已求出二叉树中每个结点的depthdepth值),编写一递归函数
14、值),编写一递归函数bitreebalance ( bitree bitreebalance ( bitree t )t ),判断二叉排序树,判断二叉排序树t t是否为平衡二叉树,如果是平是否为平衡二叉树,如果是平衡二叉树,则函数的返回值为真。衡二叉树,则函数的返回值为真。a. int bitreedepth(bitree t) int ldepth, rdepth; if ( !t ) return -1; ldepth = bitreedepth ( t-lchild ) ; rdepth = bitreedepth ( t-rchild ) ; if ( ldepth = rdepth
15、) t-depth = ldepth+1; else t-depth = rdepth+1; return t-depth;?b. status bitreebalance(bitree t) int ldepth, rdepth; if ( t=null ) return true; if (t-lchild) ldepth = t-lchild-depth; else ldepth = -1; if (t-rchild) rdepth = t-rchild-depth; else rdepth = -1; lrdepth = ldepth rdepth; if ( ( lrdepth =
16、0 | lrdepth = 1 | lrdepth = -1 ) & ( bitreebalance( t-lchild ) & bitreebalance( t-rchild ) ) return true; return false;? 在中序线索二叉树中,若结点的左指针在中序线索二叉树中,若结点的左指针lchildlchild不是线索,则该结点的前驱结点应是遍历其左子树时不是线索,则该结点的前驱结点应是遍历其左子树时_;_;若结点的右指针若结点的右指针rchildrchild不是不是线索,则该结点的后继结点应是遍历其右子树时线索,则该结点的后继结点应是遍历其右子树时_。最后访问的一个结点
17、;最后访问的一个结点;最先访问的一个结点最先访问的一个结点如果两棵二叉树的形状相同,并且相应结点中的如果两棵二叉树的形状相同,并且相应结点中的数据也相同,则这两棵二叉树相等。试用二叉链表做数据也相同,则这两棵二叉树相等。试用二叉链表做存贮结构,编写判断两棵二叉树是否相等的递归算法存贮结构,编写判断两棵二叉树是否相等的递归算法,要求函数的原型为:,要求函数的原型为:int equalbtree(bitree t1, bitree t2)。 int equalbtree( bitree t1, bitree t2 ) if ( !t1 & !t2 ) return 1; if ( !t1 | !t
18、2 ) return 0; return ( (t1-data = t2-data) & equalbtree(t1-lchild, t2-lchild)&equalbtree(t1-rchild, t2-rchild) ;?若一棵二叉树有若一棵二叉树有126个节点,在第个节点,在第7层(根结点在第层(根结点在第1层)至多有()个结点。层)至多有()个结点。a32 b64 c63 d不存在第不存在第7层层c) 63 对于有对于有10001000个结点的完全二叉树从个结点的完全二叉树从0 0开始编号(从开始编号(从上到下逐层编号,每层从左到右编号),结点上到下逐层编号,每层从左到右编号),结点1
19、74174的双的双亲结点编号为亲结点编号为_,结点,结点499499的右孩子结的右孩子结点编号为点编号为_。(174+1)/2- 1=86没有没有(2*500 + 1 - 1 =1000)试编写先根遍历树的递归算法试编写先根遍历树的递归算法preordertree(t, visit), 其中其中t为要遍历的树,为要遍历的树,visit为访问函数,树的存储结构为访问函数,树的存储结构采用孩子兄弟表示法,其类型定义如下:采用孩子兄弟表示法,其类型定义如下:typedef struct treenode elementtype data; struct treenode *firstchild; s
20、truct treenode *nextsibling; treenode, *tree;void preordertree(tree t, void (* visit) (elementtype) if (!t) return; (*visit)(t-data); for ( p = t-firstchild; p; p = p-nextsibling ) preordertree(p, visit);? 给定二叉树如下图所示。设给定二叉树如下图所示。设n n代表二叉树的根,代表二叉树的根,l l代表代表根结点的左子树,根结点的左子树,r r代表根结点的右子树。若遍历后的代表根结点的右子树。
21、若遍历后的结点序列为结点序列为3, 1, 7, 5, 6, 2, 43, 1, 7, 5, 6, 2, 4,则其遍历方式是,则其遍历方式是a alrnlrnb bnrlnrlc crlnrlnd drnlrnldrnlc1113215476已知一棵完全二叉树的第已知一棵完全二叉树的第6 6层(设根为第层(设根为第1 1层)有层)有8 8个叶个叶结点,则该完全二叉树的结点个数最多是结点,则该完全二叉树的结点个数最多是a a3939b b5252c c111111d d119119对二叉树的结点从对二叉树的结点从1 1开始进行连续编号,要求每个结点开始进行连续编号,要求每个结点的编号小于其左、右孩
22、子的编号,同一结点的左右孩的编号小于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,实现编子中,其左孩子的编号小于其右孩子的编号,实现编号应采用的遍历次序是号应采用的遍历次序是_。a a先序先序 b b中序中序 c c后序后序 d d都不是都不是 设二叉树只有度为设二叉树只有度为0 0和和2 2的结点,其结点个数为的结点,其结点个数为2121,则该二叉树的最大深度为则该二叉树的最大深度为_。 a a5 5 b b6 6 c c1010d d1111a先序先序d11利用哈夫曼算法为报文利用哈夫曼算法为报文“a big black bug bit a big a big
23、 black bug bit a big black bagblack bag”设计一个编码(注意:包括空格),使该设计一个编码(注意:包括空格),使该报文的长度最短。要求给出最终的哈夫曼树,每个字报文的长度最短。要求给出最终的哈夫曼树,每个字符的哈夫曼编码,以及报文最终的长度。符的哈夫曼编码,以及报文最终的长度。5*3 + 7*3 +* + 4*3 + 3*3 + 2*4 + 2*4 + 5 + 5 + 8*2 = 107a:5b:7 c:2g:4i:3k:2l:2t:1u:1 ”:8a: 000b: 001c: 0100g: 011i: 100k: 1010l: 1011t: 01010u
24、: 01011”: 11tu2kl4c4i7g8ab12“352015 设图的邻接表的类型定义如下。若带权图中边的权值类型为设图的邻接表的类型定义如下。若带权图中边的权值类型为整型,请对该邻接表的类型定义做出适当修改,使之能够用于整型,请对该邻接表的类型定义做出适当修改,使之能够用于表示边带权的图。表示边带权的图。#define max_vertex_num 20typedef struct arcnode int adjvex; struct arcnode *nextarc; arcnode;typedef struct vnode vertextype data; arcnode * f
25、inrstarc; vnode, adjlistmax_vertex_num;typedef struct adjlist vexs; int vexnum, arcnum; algraph;typedef struct arcnode int adjvex; int weight; struct arcnode *nextarc; arcnode;算法算法findpathfindpath是求图是求图g g中顶点中顶点v v到到s s的一条路径的一条路径pathpath(用(用线性表表示的一个顶点序列)。顶点均用顶点的编号。线性表表示的一个顶点序列)。顶点均用顶点的编号。status find
26、path(graph g,int v,int s,list &path)status findpath(graph g,int v,int s,list &path) visitedv = true; / visitedv = true; / 标示第标示第 v v 个顶点已被访问个顶点已被访问 listinsert(path,listlength(path)+1,v);listinsert(path,listlength(path)+1,v); if ( v = s ) return true; if ( v = s ) return true; for(w=firstadjvex(g,v);
27、 w!=-1; for(w=firstadjvex(g,v); w!=-1;w=nextadjvex(g, v,w)w=nextadjvex(g, v,w) if ( _ ) if ( _ ) if (findpath(g, w, s, path) return if (findpath(g, w, s, path) return true;true; listdelete(path, _ _); listdelete(path, _ _); return false; return false; visitedw = falselistlength(path) 在求连通网的最小生成树时,普里
28、姆在求连通网的最小生成树时,普里姆(primprim)算法适用于)算法适用于_,克鲁斯卡尔,克鲁斯卡尔(kruskalkruskal)算法适用于)算法适用于_。 拓扑排序可以用来检查拓扑排序可以用来检查_中是否中是否存在回路。回路。 下列图的存储结构中,只能用来表示有向图的是下列图的存储结构中,只能用来表示有向图的是a. a. 邻接矩阵邻接矩阵b. b. 邻接表邻接表c. c. 十字链表十字链表d. d. 邻接多重表邻接多重表有向图有向图 边稠密的网边稠密的网 c. 十字链表十字链表边稀疏的网边稀疏的网topologicalsorttopologicalsort是一个利用队列对图是一个利用队列
29、对图g g进行拓扑排序的算法,请进行拓扑排序的算法,请在该算法的空白处填入合适的语句或表达式。在该算法的空白处填入合适的语句或表达式。提示:数组提示:数组indegreeindegree事先已存放每个顶点的入度;数组事先已存放每个顶点的入度;数组topordertoporder在算法执行后将存放每个顶点在拓扑排序中的顺序。在算法执行后将存放每个顶点在拓扑排序中的顺序。int topologicalsort( graph g )int topologicalsort( graph g ) queue q; int counter = 0; int i, v, w; queue q; int co
30、unter = 0; int i, v, w; initqueue(q); initqueue(q); for (i = 0; i g.vexnum; i+)for (i = 0; i g.vexnum; i+) if (indegreei = 0) enqueue(q, i); if (indegreei = 0) enqueue(q, i); while (_) while (_) dequeue(q, v); dequeue(q, v); toporderv = +counter; toporderv = +counter; for(w=firstadjvex(g,v); w!=-1; w=nextadjvex(g,v,w) for(w=firstadjvex(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 象棋知识培训通知课件
- 2025版全屋定制家居产品进出口合同
- 2025版冷链物流设备采购与安装服务合同范本
- 2025年户外家具定制及全国市场销售合同
- 2025版城市综合体物业运营管理服务合同书
- 2025版路灯照明设备定期检修维护服务合同
- 2025版商品房预售协议合同示范文本执行指南
- 2025便利店夜间营业安全保障承包协议
- 2025年度高科技企业知识产权转让合同范本
- 2025年房屋抵押贷款到期续贷合同范本
- 工程机械液压传动系统形式-变量泵的控制方式
- 中外教育史课件
- 新教科版五年级上册科学全册实验报告单(超全版)
- 陕西省2023年中考英语真题(附答案)
- DB41T 2414-2023 高标准农田建设项目初步设计报告编制规程
- 萤火虫pte真题机经806分装与整合版版一致10sst
- 《安井食品销售人员绩效考核研究文献综述》2100字
- Fluke125示波器培训教材
- GB/T 30559.2-2017电梯、自动扶梯和自动人行道的能量性能第2部分:电梯的能量计算与分级
- GA 668-2006警用防暴车通用技术条件
- (四级)劳动关系协调员理论备考题库(新600题)
评论
0/150
提交评论