单项选择(2009年3月二级考试)

支持子程序调用的数据结构是【 】。

A、栈

B、树

C、队列

D、二叉树

答案解析

A

【解析】

根据栈的定义,栈是一种限定在一端进行插入与删除的线性表。

在主函数调用子函数时,主函数会保持当前状态,然后转去执行子函数,把子函数的运行结果返回到主函数,主函数继续向下执行,这种过程符合栈的特点。

讨论

某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是【 】。

一棵二叉树有10个度为1的结点,7个度为2的结点,则该二叉树共有结点个数为【 】。

某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)【 】

深度为5的满二叉树有__________个叶子结点。

一棵二叉树的中序遍历结果为DBEAFC,前序遍历结果为ABDECF,则后序遍历结果为 __________。

已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为【 】

树是结点的集合,它的根结点数目是【 】

对于正整数n ,输出其和等于n且满足以下限制条件的所有正整数的和式,组成和式的数字自左至右构成一个非递增的序列。如 n = 4 ,程序输出为:4 = 44 = 3 + 14 = 2 + 24 = 2 + 1 + 1 4 = 1 + 1 + 1 + 1test 是实现该功能的 C 程序段,请将未完成的部分补足,使之完整。test 函数为一递归函数,参数 n 为被分解和式的数, k 为当前的分解深度。算法思想是对 n 的所有合理的和式分解,将分解出的数(称为和数)存于二数组 a[]中。当其中一个分解己不再需要进一步进行时,即找到一个解,将存于 a[] 中的一个完整和式的和数输出。当还需要进一部分解时,以要进一部分解的数及分解深度为参数,递归调用 test 函数。#define MAXN 100 int a[MAXN]; test(int n,int k){     int i,j;     for (j=__________;j>=1;j--){         a[k]=j;          if (__________){             printf ( "%d = %d" , a[0],a[l]);             for (i = 2 ; i < = k ; i + + )                 printf ( " + % d " , a[i]);             printf ( "  n " );         }else test(__________,k + l );     } }

写出和下列递归过程等价的非递归过程。void test(int sum){     int a;     scanf("%d",&a);     if(a==0) sum=1;     else{         test(sum);         sum=sum*a;     }     pritf("%d",sum); }

一般情况下,将递归转换成等价的非递归算法应该设置【】