问答题(1996年中国科学技术大学)

已知序列17,31,13,11,20,35,25,8,4,11,24,40,27,请画出该序列的二叉排序树,并分别给出下列操作后的二叉排序树:

① 插入数据9;

② 删除结点17;

③ 再删除结点13。

答案解析

该序列的二叉排序树:

二叉排序树17,31,13,11,20,35,25,8,4,11,24,40,27

插入数据9后的二叉排序树:

二叉排序树17,31,13,11,20,35,25,8,4,11,24,40,27,9

删除17后的二叉排序树:

二叉排序树31,13,11,20,35,25,8,4,11,24,40,27,9

删除13后的二叉排序树:

二叉排序树31,11,20,35,25,8,4,11,24,40,27,9


讨论

某二叉排序树如下所示,新的元素45应作为【 】插入该二叉树中。

对于正整数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 );     } }

在一个有n个顶点的无向网中,有O(n1.5*log2n)条边,则应该选用【 】算法来求这个网的最小生成树,从而使计算时间较少。

G是一个非连通无向图,共有28条边,则该图至少有【 】个顶点。

如果只考虑有序树的情形,那么具有7个结点的不同形态的树共有【】

在叶子数目和权值相同的所有二叉树中,最优二叉树一定是完全二叉树,该说法【 】。

对于前序遍历和中序遍历结果相同的二叉树为__________;对于前序遍历和后序遍历结果相同的二叉树是为__________。一般二叉树只有根结点的二叉树要结点无左孩子的二叉树根结点无右孩子的二叉树所有结点只有左子树的二叉树所有结点只有右子树的二叉树

由二叉树的前序和后序遍历序列【 】唯一地确定这棵二叉树。

n个顶点的连通图用邻接矩阵表示时,该矩阵至少有__________个非零元素。

栈的输入序列为1,2,3,...,n,输出序列为a1,a2,a3,...,an,若ai=n(1≤i≤n),则有 ak>ak+1>an。