0
点赞
收藏
分享

微信扫一扫

习题整理1.1、2、3

笙烛 2022-01-04 阅读 64

11.若X是二叉树中序线索树中一个有左孩子的结点,且X不为根,则X的前驱为
在这里插入图片描述
解析:最右节点不一定是叶节点
15.以下二维数组声明中,正确的是( )。
在这里插入图片描述
解析:A.char str [ 2 ] [ 3 ] 表示声明了一个字符串的数组,最多可以存放两个字符串,每一个字符串的长度为3。题中{“a”,“b”,“c”}为三个字符串。
C.在声明数组时,数组个数可以缺省,数组长度不能缺省。该项中数组长度缺省。
D.同上

17.具有八个结点的二叉树共有多少种()?
在这里插入图片描述
解析:*(1)先考虑只有一个节点的情形,设此时的形态有f(1)种,那么很明显f(1)=1
(2)如果有两个节点呢?我们很自然想到,应该在f(1)的基础上考虑递推关系。那么,如果固定一个节点后,左右子树的分布情况为1=1+0=0+1,故有f(2) = f(1) + f(1)
(3)如果有三个节点,(我们需要考虑固定两个节点的情况么?当然不,因为当节点数量大于等于2时,无论你如何固定,其形态必然有多种)我们考虑固定一个节点,即根节点。好的,按照这个思路,还剩2个节点,那么左右子树的分布情况为2=2+0=1+1=0+2。
所以有3个节点时,递归形式为f(3)=f(2) + f(1)f(1) + f(2)。(注意这里的乘法,因为左右子树一起组成整棵树,根据排列组合里面的乘法原理即可得出)
(4)那么有n个节点呢?我们固定一个节点,那么左右子树的分布情况为n-1=n-1 + 0 = n-2 + 1 = … = 1 + n-2 = 0 + n-1。此时递归表达式为f(n) = f(n-1) + f(n-2)f(1) + f(n-3)f(2) + … + f(1)f(n-2) + f(n-1)
接下来我们定义没有节点的情况,此时也只有一种情况,即f(0)=1
那么则有:
f(0)=1,f(1)=1
f(2)=f(1)f(0)+f(0)f(1)
f(3)=f(2)f(0)+f(1)f(1)+f(0)f(2)
.
.
.
.
f(n)=f(n-1)f(0)+f(n-2)f(1)+……….+f(1)f(n-2)+f(0)f(n-1)
该数列称为卡特兰数(Catalan数),该递推关系的解为:
这里写图片描述
即含n个节点的二叉树有f(n)种形态。

18.JAVA反射机制主要提供了以下哪些功能?
在这里插入图片描述
解析:得到该对象所属的类:
Class ownerClass = owner.getClass()
在运行时构造一个类的对象:
Class newoneClass = Class.forName(className):第一步,得到要构造的实例的Class。Constructor cons = newoneClass.getConstructor(argsClass):得到构造子。cons.newInstance(args):新建实例。
在运行时判断一个类所具有的成员变量和方法:
Class ownerClass = owner.getClass():得到该对象的Class。
Field field = ownerClass.getField(fieldName):通过Class得到类声明的属性。
Object property = field.get(owner):通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。
在运行时调用一个对象的方法:
Method method = ownerClass.getMethod(methodName, argsClass):通过Method名和参数的Class数组得到要执行的Method。
method.invoke(owner, args):执行该Method,invoke方法的参数是执行这个方法的对象,和参数数组。返回值是Object,也既是该方法的返回值。

19.下面算法中可以判断出一个有向图是否有环的是:()
在这里插入图片描述
解析:通常处理图结构的时候是转换成树结构,通常也就是按照深度遍历的方式转换,
转换的时候是从起始节点开始,找节点的孩子,找到了就保存下来,然后找孩子的孩子,每次找到之后都保存下来,
这就是深度遍历,如果有向图中存在圈圈,那么就必然会出现这种情况“某个节点的孩子已经存在于你保存的节点里了”,
一旦出现就表示有圈圈。
广度遍历就不行了,因为有向图与树最大的区别之一是两个图的节点可能会有公共的孩子,所以用广度遍历的方式,即使出现了重复,
也不能证明有圈圈。

10.在一棵度为5的树T中,若14个度为5的结点,15个度为4的结点,14个度为3的结点,5个度为2的结点,10个度为1的结点,则树T的叶节点个数是( )
在这里插入图片描述
解析:1. 树的总结点数 = 总出度数 + 1(根节结点)
2. 树的叶子结点数 = 总结点数 - 度非0的结点个数
treeCount = 145+154+143+52+10*1+1 = 193
leafCount = 193 - (14+15+14+5 + 10) = 135

11.下列关于堆和栈的区别描述错误的有?
在这里插入图片描述
解析:堆:自己做菜自己吃,什么时候收盘子自己知道,但是可能会浪费(产生碎片),因为可能自己一个人吃不完。 桟:公司食堂,你吃饭由食堂工作人员帮你打饭和分配位置,吃完了工作人员帮你收盘子。你浪费粮食(碎片)那是不可能的,因为食堂会把碎片拿去喂猪。
1.栈内存操作系统来分配,堆内存由程序员自己来分配。
2.栈有系统自动分配,只要栈 剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。

13.依次将关键字序列7, 6, 4, 10, 8, 11插入到一棵空的平衡二叉树中,插入后的平衡二叉树的根结点为( )
在这里插入图片描述
解析:平衡二叉树:是一种特殊的二叉排序树,其左右子树都是平衡二叉树,要求BF(平衡因子=其左子树高-其右子树高)只能取0,1,-1
在这里插入图片描述
14.给出以下代码,请给出结果.
在这里插入图片描述
解析:在这里插入图片描述
19.已知数组D的定义是int D [ 4 ] [ 8 ] ;现在需要把这个数组作为实参传递给一个函数进行处理。下列可以作为对应的形参变量说明的是()。
在这里插入图片描述
解析:二维数组在内存中也是连续存储的,他可以通过 arr [ i ] [ j ] 寻址是因为我们定义了这个数组有多少列,
加入有N列,这样数组寻址的时候编译器会自动得到 * (arr+(i * N)+j)所以传参数的时候列数必须指定。
所以D正确A不正确。B表示有8个指向int指针的数组,不对,而C中( * s)等价于s[]。因此答案CD;

20.以下说法哪个是正确的()
在这里插入图片描述
解析:在这里插入图片描述
5.设有输入序列a,b,c,经过入栈、出栈、入栈、入栈、出栈操作后,从堆栈中弹出的元素的序列是()
在这里插入图片描述
解析:根据操作的顺序来,a入栈,a出栈,b入栈,c入栈,c出栈,最后的顺序为a c
6.已知有数组定义 char a [ 4 ] [ 5 ],以下选项中,正确的是。()
在这里插入图片描述
解析:**题干中给的是定义,选项中给的是取值,4,5都越界了,取值只能是 0 1 2 3 和 0 1 2 3 4 **
9.socket编程中,以下哪个socket的操作是不属于服务端操作的()?
在这里插入图片描述
解析:在这里插入图片描述
14.Which lines of the following will produce an error?
在这里插入图片描述
解析:short类型转为byte类型出错
a1*a2结果为int类型,转为byte类型出错
java中如果碰到char、byte和short参与运算时,会自动将这些值转换为int类型然后再进行运算。这里a1和a2就自动转为int类型了,结果也为Int类型。把一个int类型赋值给byte需要转型

15.在以下代码段下划线处填写以下哪个选项可以输出good。 ()
在这里插入图片描述
解析:指针默认指向0下标,a从0开始是ggood,+1后从1开始就变成了good

17.观察下面程序,程序运行输出的结果是()
在这里插入图片描述
解析:String st = new String(f,2,5);
取f数组第二个元素后开始 五个元素

20.下面哪些描述是正确的:( )
在这里插入图片描述
解析:在这里插入图片描述

举报

相关推荐

0 条评论