851、解析XML时,需要校验节点是否闭合,如必须有与之对应,用( )数据结构实现比较好。
A、链表
B、树
C、队列
D、栈
正确答案是:D
解析:
校验节点是否闭合时,每读入一个开始标记时,就需要将其作为优先级更高的待检验节点并置于待检验节点序列的最顶层位置,这样方便匹配消除;每读入一个结束标记时,看是否能对应上优先级最高的待检验节点,若能则消除,否则判定为不合法并终止检验。显然,用栈结构(后进先出)实现最合适。
852、假设循环队列的结构是( )
struct Queue
{DataType data[MaxSize];
int front rear;}
若有一个Queue类型的队列Q,试问判断队列满的条件应该为( )
A、Q.front == Q.rear;
B、Q.front == Q.rear.&& Q.rear == MaxSize
C、Q.front+Q.rear == MaxSize
D、Q.front == (Q.rear+1)%MaxSize
正确答案是:D
解析:
当循环队列队满时,其元素个数为MaxSize。由于约定队满时Q.front与Q.rear相差1,那么队满的条件为Q.front == (Q.rear+1)%MaxSize。举例来说,假设MaxSize =3,队列编号为123。假设现在已经插入了3个数据,即123已被占用,Q.front指向1,Q.rear指向3,若此时再插入一位,Q.rear+1=4,(Q.rear+1)%MaxSize=1,Q.front == 1 == (Q.rear+1)%MaxSize,满足队满条件,不能插入。 另外,Q.front == Q.rear用于判断队空。
853、已知二叉树的先序遍历和中序遍历得到的序列是:ABECFGHD和EBAFHGCD,该二叉树后序遍历得到的序列为( )
A、EBHGFDCA
B、BHEGFDCA
C、EGFBHDCA
D、EDCABHGF
正确答案是:A
解析:
先序遍历为ABECFGHD,显然根为A,而中序遍历为EBAFHGCD,因此A的左子树为EB,右子树为FHGCD。
于是,得到两个子问题:
1)已知先序遍历为BE,中序遍历为EB,求后序遍历
2)已知先序遍历为CFGHD,中序遍历为FHGCD,求后序遍历。
重复如上方法,即可得出结果:
后序遍历为:EBHGFDCA
854、将一棵有100个结点的完全二叉树从根这一层开始,开始进行深度遍历编号,那么编号最小的叶节点的编号为( )
A、49
B、50
C、51
D、52
正确答案是:C
解析:
根节点编号为1,在该完全二叉树中,100是最后一个叶子节点,其父节点为100/2=50。那么第一个叶子节点应该是49的右兄弟,即51。
855、设某棵二叉树中有2000个结点,则该二叉树的最小高度为( )
A、9
B、10
C、11
D、12
正确答案是:C
解析:
二叉树的最小高度对应于完全二叉树。一个具有k层的满二叉树节点数量为2^k-1。设2000个节点的完全二叉树高度为k,可得2^(k-1)-1<2000<=2^k-1,而2^10-1<2000<2^11-1,解得k=11。因此二叉树的最小高度为11。
856、一个栈的入栈序列是a,b,c,d,e,则栈的输出序列不可能是( )
A、dceab
B、decba
C、edcba
D、abcde
正确答案是:A
解析:
栈的特点是先进后出,对于这样的题目,可以实际模拟一下栈的操作。
A选项,abcd入栈,d出栈,c出栈,e入栈,e出栈,b出栈,a出栈,结果为dceba,A选项不可能。
B选项,abcd 依次入栈,d出栈,e入栈,e出栈,,c出栈,b出栈,a 出栈,结果为decba。
C 选项,abcde依次入栈,edcba依次出栈,结果为edcba。
D选项,a入栈,a出栈,b入栈,b出栈,c入栈,c出栈,d入栈,d出栈,结果为abcde。
857、下列有关数据结构的表述,不正确的是( )
A、二维数组是其数据元素为线性表的线性表
B、线性表采用链式存储,便于插入和删除操作
C、队列只能采用顺序存储方式
D、可以用非递归方式实现二叉树的前序、中序和后序遍历
正确答案是:C
解析:
数组是线性表的一种,二维数组的每个元素均为一个数组,因此可以看作是“元素为线性表的线性表”。
线性表可以用数组(顺序存储结构)或链表(链式存储结构)实现,链表的优点是插入和删除方便;数组的优点是随机存取。
队列是一种特殊的顺序表,只能在队尾插入,队头删除。链表也可以实现这个逻辑。
二叉树的前序、中序、后序遍历均有递归和非递归算法可以实现。
858、栈底至栈顶依次存放A、B、C、D四个元素,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是( )
A、ABCDE
B、DECAB
C、DCEBA
D、CDEAB
正确答案是:C
解析:
栈是一种后进先出的数据结构,栈底存放最先入栈的元素,栈顶存放最新入栈的元素,出栈时,总是将栈顶元素弹出。对于题中所述的栈中已有的4个元素,其出栈顺序严格遵循D、C、B、A,根据该序列即可判断出只有选项C是正确的。而对于初始状态下未入栈的元素E,其出栈序列中的位置取决于入栈的时间。
859、在深度为6的满二叉树中,共有多少个结点( )
A、60
B、61
C、63
D、64
正确答案是:C
解析:
满二叉树是指除最后一层无任何子节点外,每一层上的所有结点都有两个子节点的二叉树。故对于深度为6的满二叉树,第一层有1个节点,第二层有2个节点,第三层有4个节点…第六层有32个节点。故总结点数为1+2+4+8+16+32 = 2^6-1 = 63。
860、已知一棵二叉树,如果先序遍历是:乐视超级手机,中序遍历是:超视级乐机手,那么后序遍历的结果是( )
A、超级视机乐手
B、超级视机手乐
C、超级机视手乐
D、超机级视手乐
正确答案是: B
解析:
由先序遍历的规则可知“乐”为根节点,结合中序遍历顺序,可得“超视级”属于左子树,“机手”属于右子树,依此类推,可得二叉树为:
进而后序遍历结果为选项B。