[考研类试卷]计算机专业基础综合数据结构(树和二叉树)历年真题试卷汇编12及答案与解析.doc
《[考研类试卷]计算机专业基础综合数据结构(树和二叉树)历年真题试卷汇编12及答案与解析.doc》由会员分享,可在线阅读,更多相关《[考研类试卷]计算机专业基础综合数据结构(树和二叉树)历年真题试卷汇编12及答案与解析.doc(16页珍藏版)》请在麦多课文档分享上搜索。
1、计算机专业基础综合数据结构(树和二叉树)历年真题试卷汇编 12 及答案与解析一、综合题1 已知下列字符 A、B、C、D、E、F、G 的权值分别为 3、12、7、4、2、8,11,试填写出其对应哈夫曼树 HT 的存储结构的初态和终态。【北京工业大学 1998 五(10 分)】1 设 T 是一棵二叉树,除叶子结点外,其他结点的度数皆为 2,若 T 中有 6 个叶结点,试问:2 T 树的最大可能深度 Kmax=?最小可能深度 Kmin=?3 T 树中共有多少非叶结点?4 若叶结点的权值分别为 1,2,3,4,5,6。请构造一棵哈曼夫树,并计算该哈曼夫树的带权路径长度 wp1。【北京邮电大学 1992
2、 一、3(153 分)】5 已知 4 个字符 A,E C,D 的哈夫曼编码分别是 1,01,000,001。下列 01 串是由以上 4 个字母构成的一段文本的哈夫曼编码:1001000011011010011010011请将上述 01 串还原为编码前的文本。以字符在文本中出现的次数为权值,求出这棵树的带权路径长度。【电子科技大学 2013 三、1(5 分)】6 什么是前缀编码? 举例说明如何利用二叉树来设计二进制的前缀编码。【中山大学 1999 三、1(3 分) 】二、设计题6 二叉树的带权路径长度(WPL) 是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉树 T,采用二叉链表存储,结点结
3、构为: ,其中叶结点的 weight 域保存该结点的非负权值。设 root 为指向 T 的根结点的指针,请设计求 T 的 WPL 的算法,要求:7 给出算法的基本设计思想;8 使用 C 或 C+语言,给出二叉树结点的数据类型定义;9 根据设计思想,采用 C 或 C+语言描述算法,关键之处给出注释。【2014 年全国试题 41(13 分) 】10 假设一个仅包含二元运算符的算术表达式以链表形式存储在二叉树 BT 中,写出计算该算术表达式值的算法。【东北大学 2000 三、2(10 分)】11 给出算法将二叉树表示的表达式二叉树按中缀表达式输出,并加上相应的括号。【北京邮电大学 2001 五、3(
4、10 分)】12 设计一算法分别求出二元树的叶结点,度数为 l 的结点,度数为 2 的结点的个数。【哈尔滨工业大学 2002 八(8 分)】13 已知深度为 h 的二叉树,以一维数组 BT0 2h-2作为其存储结构,试编写一算法,求该二叉树中叶子结点的个数,为简单起见,设二叉树中元素结点为非负整数,要求写出算法基本思想及相应的算法。【中南大学 2003 八(10 分)】14 假定用两个一维数组 LN和 RN作为有 N 个结点 1,2,N 的二元树的存储结构。Li和 Ri分别指示结点 i 的左儿子和右儿子;Li=O(Ri=0)表示 i 的左(右)儿子为空。试写一个算法,由 L 和 R 建立一个一
5、维数组 Tb,使 Ti存放结点i 的父亲;然后再写一个判别结点 U 是否为结点 V 的后代的算法。【哈尔滨工业大学 1999 七(14 分) 】【华南师范大学 2000 六(17 分)】15 要求二叉树按二叉链表形式存储。(1)写一个建立二叉树的算法。(2)写一个判别给定的二叉树是否是完全二叉树的算法。完全二叉树定义为:深度为 K,具有 N 个结点的二叉树的每个结点都与深度为 K 的满二叉树中编号从 1 至的结点一一对应。此题以此定义为准。【西北大学 2000 六(12 分)】【哈尔滨工业大学 2000 十一(14 分) 】【南开大学 1997 四 (16 分)】【北京邮电大学 1994 九(
6、20分)】16 有 n 个结点的完全二叉树存放在一维数组 A1n中,试据此建立一棵用二叉链表表示的二叉树,根由 tree 指向。【南京理工大学 1998 七、1(6 分)】【同济大学2005 三、2(7 分) 】17 设计算法将一棵以二叉链表存储的二叉树按顺序方式存储到一维数组中。(注:按层从上到下,由左到右)。【中科院研究生院 2005 四(15 分)】18 已知深度为 h 的二叉树采用顺序存储结构已存放于数组 BT1:2 h 一 1】中,请写一非递归算法,产生该二叉树的二叉链表结构。设二叉链表中链结点的构造为(1child,data,rchild),根结点所在链结点的指针由 T 给出。【北
7、京师范大学 2005六、3(15 分)】【北京航空航天大学 1999 七(15 分)】19 二叉树的动态二叉链表结构中的每个结点有三个字段:dam,lchild,rchild。其中指针 lchild 和 rchild 的类型为 bike。静态二叉链表是用数组作为存储空间,每个数组元素存储二叉树的一个结点,也有三个字段:data,lchild,rchild。所不同的是,lchild 和 rdhild 为 integer 型,分别用于存储左右孩子的下标,如果没有左右孩子,则相应的值为 0。例如,下面左图所示的二又树的静态二叉链表如右图所示。编写算法由二叉树的动态二叉链表构造出相应的静态二又链表 a
8、1n,并写出其调用形式和有关的类型描述。其中 n 为一个确定的整数。【合肥工业大学 2000 五、3(8 分)】20 假设以双亲表示法作树的存储结构,写出双亲表示的类型说明,并编写求给定的树的深度的算法。(注:已知树中结点数)【清华大学 1994 七(15 分)】21 设一棵二叉树用二叉链表表示,求该树的高度。【南京航空航天大学 2004 二、2(12 分 )】【 北京理工大学 2000 四 3(4)】【北京轻工业学院 1997 一(15 分)】22 二叉树以链接形式(1eft ,data,right)存储,给出求二叉树宽度的算法,所谓宽度是二又树的各层上,具有结点数最多的那一层上的结点总数。
9、 【吉林大学 2006四(10 分 )】【 华南理工大学 2004 三、1(10 分) 】23 以孩子兄弟链表为存储结构,请设计递归和非递归算法求树的深度。【北方交通大学 1999 五(18 分) 】【南京航空航天大学 2000 九】24 设一棵二叉树的结点结构为(LLINK ,INFO,RLINK) ,ROOT 为指向该二叉树根结点的指针,p 和 g 分别为指向该二叉树中任意两个结点的指针,试编写一算法ANCESTOR(RDOT,p,q,r),该算法找到 p 和 q 的最近共同祖先结点 r。【吉林大学 2000 二、3(12 分) 】【中山大学 1994 六(15 分)】25 当一棵有 n(
10、0left,iv+1) ; 中序遍历左子树if(bt 一left=null&bt 一right=null) 判断该结点是否为叶子WPL+=(iv 一 1)*bt 一weight; 累加结点带权路径长度inorder(bt 一 right,Iv+1); 中序遍历右子树10 【正确答案】 以后序遍历方式遍历算术表达式的二叉树可以得到后缀表达式,后缀表达式求值已在前面讲过。这里给出另一种算法。重新定义二叉树结点结构为(1eft,data,val ,fight) ,其中 left 和 fight 是左右子女的指针,data 是算法表达式中的字符,val 是子表达式的值。采用后序遍历,先分别求出左子树和
11、右子树表示的子表达式的值,最后计算出表达式的最后结果。算法如下:int PostEval(BiTree bt) 以后序遍历算法求以二叉树表示的算术表达式的值BiTree p=bt;int Iv,rv;if(p)(1v=PostEval(p 一lef); 求左子树表示的子表达式的值rv=PostEval(p 一right); 求右子树表示的子表达式的值if(!P 一left&!P 一right) 叶子结点将数据值存到 val 域中P 一val : P 一data 一0; 数字字符转成整数存储else switch(p 一data) 求子表达式的值case+:P 一val=p 一left 一val
12、+p 一right 一val;break ;case 一:p 一Val=p 一left 一valP 一right 一val;break ;case *:p-val=p-left 一vai。P 一right 一val;break;case :p 一Val=p 一1ef 七一valp 一right 一val;return(p-val); 本算法中数值是以字符表示的,因此是一位数的算术运算。若是多位数(包括实数),要做如下修改:在建立二叉树时进行拼数,一个数输入完毕再存入二叉树结点中;本算法中的 p 一val=p 一data 一 0,要改为 p 一Val=p 一data;lv 和 rv 的类型做相应
13、改变。拼数算法的核心语句段如下:case 0=0&Xx ; num 初始值为 00else 处理小数部分scale=10 0;cinx;while(x=0&xx; 11 【正确答案】 这是用二叉树表示符号算术表达式的逆问题,即将二叉树表示的表达式还原成原表达式。二叉树的中序遍历序列与原算术表达式基本相同,差别仅在于二叉树表示中消除了括号。将中序序列加上括号就恢复原貌。当根结点运算符优先级高于左子树(或右子树)根结点运算符时,就需要加括号。核心语句段如下:if(bt)(if(bt 一ichild!=null)fbracket:Precede(bt 一data,bt 一ichild 一data)
14、双亲与左子女运算符优先级if(bracket=1)printf();InorderExp(bt 一ichild); 输出左子女表示的算术表达式if(bracket=1)printf(); 加上右括号printf(bt 一data) ; 输出根结点if(bt 一rchild!=null) 输出右子树表示的算术表达式bracket=Precede(bt-data,bt 一rchild-data)if(bracket=1)printf(“C); 右子女级别低,加括号InorderExp(bt-rchi id);if(bracket=1)printf(“)”);12 【正确答案】 结点计数可以在遍历中
15、解决。根据“访问根结点” 、“递归调用左子树”、“递归调用右子树 ”三者位置的不同,而有前序、后序和中序遍历。叶子结点是左右子女均无的结点,度为 1 的结点是只有一个子女的结点,度为 2 的结点是左右子女均有的结点。13 【正确答案】 按完全二叉树形式顺序存储二叉树时,无元素的位置要当作“虚结点”。根据本题 “二叉树中元素结点为非负整数 ”,可以设虚结点为负数。设结点序号为 i(根结点编号为 0),则当 ih-1)2(最后一个分支结点)时,若其 2f+1 和 2i+2 位置为虚结点,则 i 为叶子结点;当 i(2h-1)2 时,若 i 位置不是虚结点,则必为叶子结点。核心语句段如下: for(
16、i=0;i k 一 1 if(i0)num+; 存储在数组后一半的元素是叶子结点14 【正确答案】 由指示结点 i 左儿子和右儿子的两个一维数组 Li和 Ri,建立指示结点 i 的双亲的一维数组 Ti,根据 T 数组,判断结点 U 是否是结点 V 后代的算法,转为判断结点 V 是否是结点 U 的祖先的问题。核心语句段如下:for(i=i ; ix; 本题假定结点数据域为整型if(x=0)bt=null; 空指针else if(x0)bt=new(BiNode); 申请空间bt-data=x; bt-ichild=creat() ;bt-rchiId=creat();else error(“输入
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 考研 试卷 计算机专业 基础 综合 数据结构 二叉 历年 汇编 12 答案 解析 DOC
