单项选择题

一个具有m个节点的二叉树,其二叉链表节点(左、右孩子指针分别用left和right表示)中的空指针总数必定为 (6) 个。为形成中序(先序、后序)线索二叉树,现对该二叉链表所有节点进行如下操作:若节点p的左孩子指针为空,则将该左指针改为指向p在中序(先序、后序)遍历序列的前驱节点;若p的右孩子指针为空,则将该右指针改为指向p在中序(先序、后序)遍历序列的后继节点。假设指针s指向中序(先序、后序)线索二叉树中的某节点,则 (7)

(6)处填()。

A.m+2
B.m+1
C.m
D.m-1

热门 试题

问答题
阅读以下说明和C程序,在(n)处填入适当的字句。 [说明] 现有n(n<1000)节火车车厢,顺序编号为1,2,3,…,n,按编号连续依次从A方向的铁轨驶入,从B方向铁轨驶出,一旦车厢进入车站(Station)就不能再回到A方向的铁轨上;一旦车厢驶入B方向铁轨就不能再回到车站,如图8.11所示,其中Station为栈结构,初始为空且最多能停放1000节车厢。 下面的C程序判断能否从B方向驶出预先指定的车厢序列,程序中使用了栈类型STACK,关于栈基本操作的函数原型说明如下。 void InitStack(STACK *s):初始化栈。 void Push(STACK*s,int e):将一个整数压栈,栈中元素数目增1。 void Pop (STACK *s):栈顶元素出栈,栈中元素数目减1。 int Top (STACK s):返回非空栈的栈顶元素值,栈中元素数目不变。 int IsEmpty (STACK s):若是空栈则返回1,否则返回0。 [C程序] #include<stdio.h> *此处为栈类型及其基本操作的定义,省略* int main() STACK station; int state [1000]; int n; *车厢数* int begin,i,j,maxNo; *maxNo为A端正待入栈的车厢编号* printf( 清输入车厢数: ); scanf( %d ,&n); printf( 请输入需要判断的车厢编号序列(以空格分隔): ); if(n<1=return-1; for(i=0; i<n; i++) *读入需要驶出的车厢编号序列,存入数组state[]* scanf( %d ,&state [i]); (1) ; *初始化栈* maxNo=1; for(i:0;i<n;)( *检查输出序列中的每个车厢号state [i]是否能从栈中获取* if( (2) )( *当栈不为窄时* if (state[i]=Top(station)) *栈顶车厢号等于被检查车厢号* printf( %d ,Top(station)); Pop(&station);i++; else if ( (3) ) printf( error n ); return 1; else begin= (4) ; for(j=begin+1;j<=state [i];j++) Push (&station, j); else *当栈为空时* begin=maxNo; for(j=begin; j<=state [il; j++) Push (&station, j); maxNo= (5) ; printf( OK ); return 0;