树和二叉树习题集与答案解析
树与二叉树习题解析(答)
习题五树与二叉树一、选择题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、26D、2510、下面几个符号串编码集合中,不是前缀编码的是。
数据结构课后习题答案及解析第六章
第六章树和二叉树(下载后用阅读版式视图或web版式可以看清)习题一、选择题1.有一“遗传”关系:设x是y的父亲,则x可以把它的属性遗传给y。
表示该遗传关系最适合的数据结构为( )。
A.向量B.树 C图 D.二叉树2.树最合适用来表示( )。
A.有序数据元素 B元素之间具有分支层次关系的数据C无序数据元素 D.元素之间无联系的数据3.树B的层号表示为la,2b,3d,3e,2c,对应于下面选择的( )。
A. la (2b (3d,3e),2c)B. a(b(D,e),c)C. a(b(d,e),c)D. a(b,d(e),c)4.高度为h的完全二叉树至少有( )个结点,至多有( )个结点。
A. 2h_lB.h C.2h-1 D. 2h5.在一棵完全二叉树中,若编号为f的结点存在右孩子,则右子结点的编号为( )。
A. 2iB. 2i-lC. 2i+lD. 2i+26.一棵二叉树的广义表表示为a(b(c),d(e(,g(h)),f)),则该二叉树的高度为 ( )。
A.3B.4C.5D.67.深度为5的二叉树至多有( )个结点。
A. 31B. 32C. 16D. 108.假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为( )个。
A. 15B. 16C. 17D. 479.题图6-1中,( )是完全二叉树,( )是满二叉树。
..专业知识编辑整理..10.在题图6-2所示的二叉树中:(1)A结点是A.叶结点 B根结点但不是分支结点 C根结点也是分支结点 D.分支结点但不是根结点(2)J结点是A.叶结点 B.根结点但不是分支结点 C根结点也是分支结点 D.分支结点但不是根结点(3)F结点的兄弟结点是A.EB.D C.空 D.I(4)F结点的双亲结点是A.AB.BC.CD.D(5)树的深度为A.1B.2C.3D.4(6)B结点的深度为A.1B.2C.3D.4(7)A结点所在的层是A.1B.2C.3D.4..专业知识编辑整理..11.在一棵具有35个结点的完全二叉树中,该树的深度为( )。
数据结构(树和二叉树)练习题与答案2
1、一颗二叉树的括号表示为“1(2(4,5(6,7)),3)”)。
设N代表二叉树的根,L代表根节点的左子树,R代表根节点的右子树。
若遍历后的节点序列为3,1,7,5,6,2,4,则其遍历方式是()。
A.NRLB.RLNC.LRND.RNL正确答案:D2、若二叉树(每个节点值为单个字符)的中序遍历序列是abcdef,且c为根节点,则()。
A.二叉树有两个度为0的节点B.二叉树的高度为5C.节点c有两个孩子D.以上都不对正确答案:C解析: C、从中序序列看出,节点c的左右子树均不空。
3、若知道一棵二叉树的(),便可以唯一确定该二叉树。
A.中序序列B.先序和后序序列C.中序和后序序列D.先序序列正确答案:C4、一棵二叉树的先序遍历序列为ABCDEFG,它的中序遍历序列可能是()。
A.ADCFEGB.ABCDEFGC.DACEFBGD.CABDEFG正确答案:B解析: B、当一棵二叉树所有节点的左子树为空时,先序遍历序列和中序遍历序列相同。
先序序列和中序序列可以确定一棵二叉树,这里由选项A、C和D的中序序列无法确定一棵二叉树。
5、一棵二叉树的先序遍历序列为ABCDEF,中序遍历序列为CBAEDF,则后序遍历序列为()A.FEDCBAB.CBEFDAC.CBEDFAD.不确定正确答案:B6、某棵二叉树中,X节点有左孩子Y节点,则在其先序遍历中()。
A.访问Y节点后,接着遍历Y节点的左子树,然后访问X节点B.访问X节点后,接着遍历Y节点的左子树,然后访问Y节点C.访问Y节点后立即访问X节点D.访问X节点后立即访问Y节点正确答案:D解析: D、其先序遍历序列为…XY…。
7、关于二叉树(含2个以上的节点)的先序遍历序列中,以下正确的是()。
A.先序遍历序列的最后一个节点是根节点B.先序遍历序列的最后一个节点一定是叶子节点C.以上都不对D.先序遍历序列的第一个节点一定是叶子节点正确答案:B解析: B、先序遍历过程是:NLR,最后访问的节点的L、R均为空,所以为叶子节点。
数据结构(树和二叉树)练习题与答案1
1、树最适合用来表示()。
A.元素之间无联系的数据B.元素之间具有层次关系的数据C.无序数据元素D.有序数据元素正确答案:B2、现有一“遗传”关系,设x是y的父亲,则x可以把他的属性遗传给y。
表示该遗传关系最适合的数据结构为()。
A.线性表B.树C.数组D.图正确答案:B3、一棵节点个数为n、高度为h的m(m≥3)次树中,其分支数是()。
A.n+hB.h-1C.n-1D.nh正确答案:C4、若一棵3次树中有2个度为3的节点,1个度为2的节点,2个度为1的节点,该树一共有()个节点。
A.11B.5C.8D.10正确答案:A解析: A、对于该3次树,其中有n3=2,n2=1,n1=2,总分支数=总度数=n-1,总度数=1×n1+2×n2+3×n3=10,则n=总度数+1=11。
5、设树T的度为4,其中度为1、2、3、4的节点个数分别为4、2、1、1,则T中的叶子节点个数是()。
A.6B.8C.7D.5正确答案:B解析: B、这里n1=4,n2=2,n3=1,n4=1,度之和=n-1=n1+2n2+3n3+4n4=15,所以n=16,则n0=n-n1-n2-n3-n4=16-8=8。
6、有一棵三次树,其中n3=2,n2=1,n0=6,则该树的节点个数为()。
A.9B.12C.大于等于9的任意整数D.10正确答案:C解析: C、n=n0+n1+n2+n3=6+n1+1+2=9+n1。
7、假设每个节点值为单个字符,而一棵树的后根遍历序列为ABCDEFGHIJ,则其根节点值是()。
A.JB.BC.以上都不对D.A正确答案:A8、一棵度为5、节点个数为n的树采用孩子链存储结构时,其中空指针域的个数是()。
A.4nB.4n-1C.4n+1D.5n正确答案:C解析: C、总指针数=5n,非空总指针数=分支数=n-1,空指针域的个数=5n-(n-1)=4n+1。
9、有一棵三次树,其中n3=2,n2=2,n1=1,该树采用孩子兄弟链存储结构时,则总的指针域数为()。
树与二叉树(答案)
n-,由于1 、【答案】B。
如果根结点的深度为1,则满二叉树结点总数为2111-=2048-1=2047<2381,故整个树高为11(满二叉树)+1=12。
由于本题设定的根结点21深度为0,故该题的树高为11。
2、【答案】BC。
不论先根、中序和后根,左子树的结点总是出现在右子树结点的前面。
①先根: 123456,后根:325641,则1是根;②先根:与1相连的是2,后根以2为界,得到1的左右两棵子树,左子树:32,右子树564。
③递归求解,先根: 23,后根32,得到:3既可以是2的左子树,也可以是右子树④先根:456,后根:564,得到:先根、后根遍历得到的二叉树不唯一⑤对生成的二叉树(两种情况)中根遍历,得到答案B和C。
关于先根、中根和后根遍历求解问题,需要大家重点掌握。
3、【答案】ABD。
①先根:124563 后根:4652731 得到:根结点为1。
②先根1后为2,后根以2为分界,4652是根结点的左子树(其中2是左结点),73是根结点的右子树。
③继续递归求解,先根:456 后根:465,则4为2的左子树,56为2的右子树。
④先根:56 后根:65,则5为2的右子树,6既可以是5的左子树,也可以是右子树。
⑤先根:37 后根:73,则1的右子树为3,7既可以是3的左子树,也可以是右子树,得到全树结构。
最后中根遍历,共4组解。
ABD是其中三种,还是一种:4265137。
4、【答案】C。
设二叉树中度为0的结点(叶子)有N0个,度为1的结点有N1个,度为2的结点有N2个,所有结点个数:N0+N1+N2,所有的边数:N0*0+N1*1+N2*2=N1+2N2。
由于每个结点上都有一条边,除根结点外,所以有N0+N1+N2=N1+2N2+1→N0=N2+1 …………①完全二叉树有2*N-1个结点(奇数个),而完全二叉树的上一层是一棵满二叉树,而满二叉树的结点个数是2^k-1(k是层数,是奇数个),所以此二叉树最下一层是偶数个结点,这样的二叉树没有度为1的结点,即N1=0,得到N0+N2=2*N-1 →N2=2*N-N0-1 …………②将②式代入①式,得到N0=N。
数据结构(树与二叉树)习题与答案
一、单选题1、已知一算术表达式的中缀形式为 A-B/C+D*E,前缀形式为+-A/BC*DE,其后缀形式为( )。
A.ABC/-DE*+B.AB/C-D*E+C. A-BC/DE*+D. ABCDE/-*+正确答案:A2、有关二叉树下列说法正确的是()。
A.二叉树中任何一个结点的度都为2B.一棵二叉树的度可以小于2C.二叉树中每个结点的度都为2D.二叉树中至少有一个结点的度为2正确答案:B3、在一棵高度为k的满二叉树中,结点总数为()。
A.2k-1B. 2k-1C. 2k-1+1D.2k正确答案:B4、某二叉树中有60个叶子结点,则该二叉树中度为2的结点个数为()。
A.不确定B.60C.59D.61正确答案:C解析:任意二叉树中,n0=n2+15、高度为7的完全二叉树,最少有()个结点。
A.127B.128C.63D.64正确答案:D解析:前6层都是满的,最后一层(第7层)近1个结点。
可保证题目条件。
6、高度为7的二叉树,最少有()个结点。
A.7B.127C.13D.64正确答案:A解析:每层只有1个结点。
共7个即可构成一个高度为7的二叉树。
7、对任意一棵有n个结点的树,这n个结点的度之和为( )。
A.n-1B.2*nC.n+2D.n正确答案:A解析:所有结点的度之和为分支个数,分支个数即为结点个数-18、在下列存储形式中,()不是树的存储形式。
A.双亲表示法B.孩子-兄弟表示法C.孩子链表表示法D.顺序存储表示法正确答案:D9、对二叉树中的结点进行编号,要求根结点的编号最小,左孩子结点编号比右孩子结点编号小。
则应该采用()遍历方法对其进行编号。
A.层次B.先序C.后序D.中序正确答案:B10、某二叉树中有60个叶子结点,则该二叉树中度为2的结点个数为()。
A. 59B.61C.60D.不一定正确答案:A11、树的后根遍历,相当于对应二叉树的()遍历。
A.中序B.后序C.层次D.先序正确答案:A二、判断题1、完全二叉树一定存在度为1的结点。
第6章 树和二叉树-习题-答案
第6章树和二叉树习题答案1.从概念上讲,树,森林和二叉树是三种不同的数据结构,将树,森林转化为二叉树的基本目的是什么,并指出树和二叉树的主要区别。
答:树的孩子兄弟链表表示法和二叉树二叉链表表示法,本质是一样的,只是解释不同,也就是说树(树是森林的特例,即森林中只有一棵树的特殊情况)可用二叉树唯一表示,并可使用二叉树的一些算法去解决树和森林中的问题。
树和二叉树的区别有三:一是二叉树的度至多为2,树无此限制;二是二叉树有左右子树之分,即使在只有一个分枝的情况下,也必须指出是左子树还是右子树,树无此限制;三是二叉树允许为空,树一般不允许为空(个别书上允许为空)。
2.请分析线性表、树、广义表的主要结构特点,以及相互的差异与关联。
答:线性表属于约束最强的线性结构,在非空线性表中,只有一个“第一个”元素,也只有一个“最后一个”元素;除第一个元素外,每个元素有唯一前驱;除最后一个元素外,每个元素有唯一后继。
树是一种层次结构,有且只有一个根结点,每个结点可以有多个子女,但只有一个双亲(根无双亲),从这个意义上说存在一(双亲)对多(子女)的关系。
广义表中的元素既可以是原子,也可以是子表,子表可以为它表共享。
从表中套表意义上说,广义表也是层次结构。
从逻辑上讲,树和广义表均属非线性结构。
但在以下意义上,又蜕变为线性结构。
如度为1的树,以及广义表中的元素都是原子时。
另外,广义表从元素之间的关系可看成前驱和后继,也符合线性表,但这时元素有原子,也有子表,即元素并不属于同一数据对象。
3.在二叉树的Llink-Rlink存储表示中,引入“线索”的好处是什么?答:在二叉链表表示的二叉树中,引入线索的目的主要是便于查找结点的前驱和后继。
因为若知道各结点的后继,二叉树的遍历就变成非常简单。
二叉链表结构查结点的左右子女非常方便,但其前驱和后继是在遍历中形成的。
为了将非线性结构二叉树的结点排成线性序列,利用结点的空链域,左链为空时用作前驱指针,右链为空时作为后继指针。
第6章_数据结构习题题目及答案_树和二叉树_参考答案
一、基础知识题6.1设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1,求树T中的叶子数。
【解答】设度为m的树中度为0,1,2,…,m的结点数分别为n0, n1, n2,…, nm,结点总数为n,分枝数为B,则下面二式成立n= n0+n1+n2+…+nm (1)n=B+1= n1+2n2 +…+mnm+1 (2)由(1)和(2)得叶子结点数n0=1+即: n0=1+(1-1)*4+(2-1)*2+(3-1)*1+(4-1)*1=86.2一棵完全二叉树上有1001个结点,求叶子结点的个数。
【解答】因为在任意二叉树中度为2 的结点数n2和叶子结点数n0有如下关系:n2=n0-1,所以设二叉树的结点数为n, 度为1的结点数为n1,则n= n0+ n1+ n2n=2n0+n1-11002=2n0+n1由于在完全二叉树中,度为1的结点数n1至多为1,叶子数n0是整数。
本题中度为1的结点数n1只能是0,故叶子结点的个数n0为501.注:解本题时要使用以上公式,不要先判断完全二叉树高10,前9层是满二叉树,第10层都是叶子,……。
虽然解法也对,但步骤多且复杂,极易出错。
6.3 一棵124个叶结点的完全二叉树,最多有多少个结点。
【解答】由公式n=2n0+n1-1,当n1为1时,结点数达到最多248个。
6.4.一棵完全二叉树有500个结点,请问该完全二叉树有多少个叶子结点?有多少个度为1的结点?有多少个度为2的结点?如果完全二叉树有501个结点,结果如何?请写出推导过程。
【解答】由公式n=2n0+n1-1,带入具体数得,500=2n0+n1-1,叶子数是整数,度为1的结点数只能为1,故叶子数为250,度为2的结点数是249。
若完全二叉树有501个结点,则叶子数251,度为2的结点数是250,度为1的结点数为0。
6.5 某二叉树有20个叶子结点,有30个结点仅有一个孩子,则该二叉树的总结点数是多少。
数据结构第六章树和二叉树习题及答案
习题六树和二叉树一、单项选择题1.以下说法错误的是 ( )A.树形结构的特点是一个结点可以有多个直接前趋B.线性结构中的一个结点至多只有一个直接后继C.树形结构可以表达(组织)更复杂的数据D.树(及一切树形结构)是一种"分支层次"结构E.任何只含一个结点的集合是一棵树2.下列说法中正确的是 ( )A.任何一棵二叉树中至少有一个结点的度为2B.任何一棵二叉树中每个结点的度都为2C.任何一棵二叉树中的度肯定等于2D.任何一棵二叉树中的度可以小于23.讨论树、森林和二叉树的关系,目的是为了()A.借助二叉树上的运算方法去实现对树的一些运算B.将树、森林按二叉树的存储方式进行存储C.将树、森林转换成二叉树D.体现一种技巧,没有什么实际意义4.树最适合用来表示 ( )A.有序数据元素 B.无序数据元素C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B.11 C.15 D.不确定6.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。
与森林F 对应的二叉树根结点的右子树上的结点个数是()。
A.M1 B.M1+M2 C.M3 D.M2+M37.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()A. 250 B. 500 C.254 D.505 E.以上答案都不对8. 设给定权值总数有n 个,其哈夫曼树的结点总数为( )A.不确定 B.2n C.2n+1 D.2n-19.二叉树的第I层上最多含有结点数为()A.2I B. 2I-1-1 C. 2I-1 D.2I -110.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( )结点A.2h B.2h-1 C.2h+1 D.h+111. 利用二叉链表存储树,则根结点的右指针是()。
A.指向最左孩子 B.指向最右孩子 C.空 D.非空12.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为()。
数据结构C语言版第二版第5章树和二叉树答案
第5章 树和二叉树1.选择题(1)把一棵树转换为二叉树后,这棵二叉树的形态是( )。
A .唯一的 B.有多种C .有多种,但根结点都没有左孩子 D.有多种,但根结点都没有右孩子 答案:A解释:因为二叉树有左孩子、右孩子之分,故一棵树转换为二叉树后,这棵二叉树的形态是唯一的。
(2)由3个结点可以构造出多少种不同的二叉树?( ) A .2 B .3 C .4 D .5 答案:D解释:五种情况如下:A CBACBA CBACBACB(3)一棵完全二叉树上有1001个结点,其中叶子结点的个数是( )。
A .250 B . 500 C .254 D .501 答案:D解释:设度为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 为( )。
A .11B .10C .11至1025之间D .10至1024之间 答案:C解释:若每层仅有一个结点,则树高h 为1025;且其最小树高为 log 21025 + 1=11,即h 在11至1025之间。
(5)深度为h 的满m 叉树的第k 层有( )个结点。
(1=<k=<h) A .mk-1B .m k -1C .m h-1D .m h-1答案:A解释:深度为h 的满m 叉树共有m h-1个结点,第k 层有m k-1个结点。
(6)利用二叉链表存储树,则根结点的右指针是( )。
A .指向最左孩子B .指向最右孩子C .空D .非空 答案:C解释:利用二叉链表存储树时,右指针指向兄弟结点,因为根节点没有兄弟结点,故根节点的右指针指向空。
(7)对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用( )遍历实现编号。
数据结构第六章 树和二叉树课后习题答案
第六章课后习题6、1、各层的结点数目是:K2、编号为n的结点的双亲结点是:<=(n-2)/k的最大整数3、编号为n的结点的第i个孩子结点编号是:k*(n-1)+1+i4、编号为n的结点有右兄弟的条件是:(n-1)能被k整除右兄弟的编号是:n+1.7、1、先序序列和中序序列相同:空二叉树或没有左子树的二叉树。
2、中序序列和后序序列相同:空二叉树或没有右子树的二叉树。
3、先序序列和后序序列相同:空二叉树或只有根的二叉树。
9、中序序列:BDCEAFHG和后序序列:DECBHGFA的二叉树为:AB FC GD E H先序序列:ABCDEFGH算法设计:3、typedef struct{int data[100];int top;}seqstack;seqstack *s;Perorder(char a[],int n){int i=1,count=1;s->top=-1;if(n==0)return(0);else{if(I<=n){s->top++;s->data[s->top]=a[I];}while(count<n){printf(“%c”,s->data[s->top]);count++;s->top--;if(s->data[s->top]);==a[i]){ printf(“%c”,s->data[s->top]);count++;s->top--;}if((2*i+1)<n){i=2*i;s->top++;s->data[s->top]=a[i+1];s->top++;s->data[s->top]=a[i];}else if(a*i<n){i=2*i;s->top++;s->data[s->top]=a[i];}else if(i/2%2==1)i=i/2/2+1;else i=i/2+1;}}}main(){char A[]=“kognwyuvb”;int n=strlen(A);s=(seqstack *)malloc(sizeof(seqstack)); printf(“\n”);Perorder(A,n);}。
(山东科技大学)PTA数据结构答案与解析-
2-6
若元素a、b、c、d、e、f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈工作,则不可能 得到的出栈序列是? (2分)
1. b c a e f d 2. c b d a e f 3. d c e b f a 4. a f e d c b
B代表分支数,n代表总结点数,将上边式子联立,然后带入题目中数据,可得
答案: D
2-9
若一棵二叉树的前序遍历序列是{ 4, 2, 1, 3, 6, 5, 7 },中序遍历序列是{ 1, 2, 3, 4, 5, 6, 7 },则下列哪句是错的?(3 分)
1. 这是一棵完全二叉树 2. 所有的奇数都在叶子结点上 3. 这是一棵二叉搜索树 4. 2是5的父结点 解析:根据前序,中序遍历可以建出图来,然后根据图来判断即可
答案: C
2-4
设栈S和队列Q的初始状态均为空,元素a、b、c、d、e、f、g依次进入栈S。若每个元素出栈后立即进入队列Q, 且7个元素出队的顺序是b、d、c、f、e、a、g,则栈S的容量至少是: (2分)
1. 1 2. 2 3. 3 4. 4
解析: 模拟即可 答案: C
2-5
假设有5个整数以1、2、3、4、5的顺序被压入堆栈,且出栈顺序为3、5、4、2、1,那么为了获得这样的输出, 堆栈大小至少为: (2分)
1-3 若一个栈的输入序列为{1, 2, 3, 4, 5},则不可能得到{3, 4, 1, 2, 5}这样的出栈序列。 (2分) 解析:2一定先与1出栈的 答案: T
2.单选题
2-1 给定一个堆栈的入栈序列为{ 1, 2, ⋯, n },出栈序列为{ p1, p2, ⋯, pn }。如果p2=n,则存在多少种不同的出栈序 列?(2分)
树与二叉树1_习题与解答
1、括号的匹配(表达式的合法性检查)[问题描述]假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。
请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。
假设表达式长度小于255,左圆括号少于20个。
[问题分析]假设输入的字符串存储在c中(var c:string[255])。
我们可以定义一个栈:var s:array[1..maxn] of char;top:integer;用它来存放表达式中从左往右的左圆括号(maxn=20)。
算法的思路为:顺序(从左往右)扫描表达式的每个字符c[i],若是“(”,则让它进栈;若遇到的是“)”,则让栈顶元素出栈;当栈发生下溢或当表达式处理完毕而栈非空时,都表示不匹配,返回“NO”;否则表示匹配,返回“YES”。
[参考程序]program lx5;const maxn=20;var c:string;function judge(c:string):boolean;var s:array[1..maxn] of char;top,i:integer;ch:char;beginjudge:=true;top:=0;i:=1;ch:=c[i];while ch<>'@' dobeginif (ch='(') or (ch=')') thencase ch of'(' : begin top:=top+1;s[top]:='(' end;')' : if top>0 then top:=top-1else begin judge:=false;exit end;end;i:=i+1;ch:=c[i];end;if top<>0 then judge:=false;end;begin {main}assign(input,'match.in');assign(output,'match.out');reset(input);rewrite(output);readln(c);if judge(c) then writeln('YES') else writeln('NO');close(input);close(output);end.2、编程把中缀表达式转换成后缀表达式[问题描述]输入一个中缀表达式,编程输出其后缀表达式,要求输出的后缀表达式的运算次序与输入的中缀表达式的运算次序一致。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、填空题
1. 不相交的树的聚集称之为森林。
2. 从概念上讲,树与二叉树是两种不同的数据结构,将树转化为二叉树的基本目的是_树可采用孩子-兄弟链表(二叉链表)做存储结构,目的是利用二叉树的已有算法解决树的有关问题。
3. 深度为k的完全二叉树至少有2 k-1个结点。
至多有2 k-1个结点,若按自上而下,从左到右次序给结点编号(从1开始),则编号最小的叶子结点的编号是2 k-2+1。
4. 在一棵二叉树中,度为零的结点的个数为n 0,度为2的结点的个数为n 2,则有n0= n2+1。
5. 一棵二叉树的第i(i≥1)层最多有2 i-1个结点;一棵有n(n>0)个结点的满二叉树共有(n+1)/2个叶子和(n-1)/2个非终端结点。
6.现有按中序遍历二叉树的结果为abc,问有5种不同形态的二叉
树可以得到这一遍历结果。
7. 哈夫曼树是带权路径最小的二叉树。
8. 前缀编码是指任一个字符的编码都不是另一个字符编码的前缀的一种编码方法,是设计不等长编码的前提。
9. 以给定的数据集合{4,5,6,7,10,12,18}为结点权值构造的Huffman 树的加权路径长度是165 。
10. 树被定义为连通而不具有回路的(无向)图。
11. 若一棵根树的每个结点最多只有两个孩子,且孩子又有左、右之分,次序不能颠倒,则称此根树为二叉树。
12. 高度为k,且有个结点的二叉树称为二叉树。
2k-1 满
13. 带权路径长度最小的二叉树称为最优二叉树,它又被称为树。
Huffman
14. 在一棵根树中,树根是为零的结点,而为零的结点是结点。
入度出度树叶
15. Huffman树中,结点的带权路径长度是指由到之间的路径长度与结点权值的乘积。
结点树根
16. 满二叉树是指高度为k,且有个结点的二叉树。
二叉树的每一层i上,最多有个结点。
2k-1 2i-1
二、单选题
1. 具有10个叶结点的二叉树中有(B) 个度为2的结点。
(A)8 (B)9 (C)10 (D)11
2.对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,则可采用_(3)次序的遍历实现编号。
(1)先序(2)中序
(3)后序(4)从根开始按层遍历
3. 由2、3、4、7作为结点权值构造的树的加权路径长度 B 。
A、33
B、30
C、36
D、40
4. 高度为6的满二叉树,总共有的结点数是 B 。
A、15
B、63
C、20
D、25
5. 下面描述根树转换成二叉树的特性中,正确的是 C 。
A、根树转换成的二叉树是唯一的,二叉树的根结点有左、右孩子。
B、根树转换成的二叉树是不唯一的,二叉树的根结点只有左孩子。
C、根树转换成的二叉树是唯一的,二叉树的根结点只有左孩子。
D、根树转换成的二叉树是不唯一的,二叉树的根结点有左、右孩子。
6. 如图所示的4棵二叉树中,不是完全二叉树的是。
A、○
B、○
○○○○
○○○○○○
C、○
D、○
○○○○
○○○○
C
7.某二叉树先序遍历的结点序列是abdgcefh,中序遍历的结点序列是dgbaechf,则其后序遍历的结点序列是 D 。
A、bdgcefha
B、gdbecfha
C、bdgaechf
D、gdbehfca
8. 已知二叉树按中序遍历所得到的结点序列为DCBGEAHFIJK,按后序遍历所得到的结点序列为DCEGBFHKJIA,按先序遍历所得到的结点序列为ABCDGEIHFJK 。
9. 设n,m为一棵二叉树上的两个结点,在中序遍历时,n在m前的条件是
C 。
A、n在m右方
B、n是m祖先
C、n在m左方
D、n是m子孙
10. 二叉树第i 层结点的结点个数最多是(设根的层数为1):A
A)2i-1B)2i-1 C)2i D)2i-1 11. 树的后根遍历序列等同于该树对应的二叉树的:B
A)先序序列B)中序序列C)后序序列
12. 树最适合用来表示_C___。
A. 有序数据元素
B. 无
序数据元素
C. 元素之间具有分支层次关系的数据
D. 元素之间无联系的数
据
13. 由于二叉树中每个结点的度最大为2,所以二叉树是一种特殊的树,这种说法_B___。
A. 正确
B. 错误
14. 假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为B个。
A.15 B.16C.17D.47
15. 按照二叉树的定义,具有3个结点的不同形状的二叉树有__C__种。
A. 3
B. 4
C. 5
D. 6
16. 深度为5的二叉树至多有__C__个结点。
A. 16
B. 32
C. 31
D. 10
17. 对一个满二叉树,m个树叶,n个结点,深度为h,则__D__ 。
A. n=h+m
B. h+m=2n
C. m=h-1
D. n=2 h-1
18. 任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序_A___。
A.不发生改变
B.发生改变
C.不能确定
D.以上都不对
19. 如果某二叉树的前根次序遍历结果为stuwv,中序遍历为uwtvs,那么该二叉树的后序为__C__。
A. uwvts
B. vwuts
C. wuvts
D. wutsv
20. 二叉树的前序遍历序列中,任意一个结点均处在其子女结点的前面,这种说法__A__。
A. 正确
B. 错误
21. 在一非空二叉树的中序遍历序列中,根结点的右边_A___。
A. 只有右子树上的所有结点
B. 只有右子树上的部
分结点
C. 只有左子树上的部分结点
D. 只有左子树上的所
有结点
22. 已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是__D__。
A. acbed
B. decab
C. deabc
D. cedba
23. 实现任意二叉树的后序遍历的非递归算法而不使用栈结构,最佳方案是二叉树采用_C___存储结构。
A. 二叉链表
B. 广义表存储结构
C. 三叉链表
D. 顺序存储结构
24. 在线索化二叉树中,t所指结点没有左子树的充要条件是_B___。
A. t—>left=NULL
B. t—>
ltag=1
C. t—>ltag=1且t—>left=NULL
D. 以上都不对
25. 二叉树按某种顺序线索化后,任一结点均有指向其前驱和后续的线索,这种说法_B___。
A. 正确
B. 错误
26. 树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。
这里,我们把由树转化得到的二叉树叫做这棵数对应的二叉树。
结论__A__是正确的。
A.树的先根遍历序列与其对应的二叉树的先序遍历序列相同
B.树的后根遍历序列与其对应的二叉树的后序遍历序列相同
C.树的先根遍历序列与其对应的二叉树的中序遍历序列相同
D.以上都不对
6.42统计二叉树中叶子结点的个数(先序遍历)
V o i d C o u n t L e a f(B i T r e e T,i n t&c o u n t){
i f(T){
i f((!T->Lchild)&&(!T->Rchild))
Count++;//计数器加1
CountLeaf(T->Lchild,count);
CountLeaf(T->Rchild,count);
}
}
2.编写算法实现求以二叉链表表示的二叉树的深度的递归算法。
I n t D e p t h(B i T r e e T){
i f(!T)r e t u r n0;
e l s e{
h1=D e p t h(T->Lchild);
h2=D e p t h(T->Rchild);
if(h1>=h2)return h1+1;
else return h2+1;}
}//Depth
6.43交换所有结点的左右子树void Bitree_Revolute(Bitree T) {
if(T)
T->lchild<->T->rchild; //交换左右子树if(T->lchild) Bitree_Revolute(T->lchild); if(T->rchild) Bitree_Revolute(T->rchild);
//左右子树再分别交换各自的左右子树}//Bitree_Revolute。