假定用两个一维数组L[N]和R[N]作为有N个结点1,2,…,N的二叉树的存储结构。L[i]和R[i]分别指示结点i的左儿子和右儿子;L[i]=0(R[i]=0)表示i的左(右)儿子为空。试写一个算法,由L和R建立一个一维数组T[n],使T[i]存放结点i的父亲;然后再写一个判别结点U是否为结点V的后代的算法。
在下面关于树的相关概念的叙述中,正确的是( )。
已知二叉排序树如下图所示,下列序列构造此二叉排序树不正确的是()。
求解最短路径的Floyd算法的时间复杂度为( )。
已知一棵满二叉树的结点个数为20到40之间的素数,此二叉树的叶子结点有( )个。
对一个图进行遍历可以得到不同的遍历序列,那么导致得到的遍历序列不唯一的因素有哪些?
对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是( )。
下列4组含C1~C7的结点序列中,()是下图所示的有向图的拓扑序列。
最小最大堆(minmaxHeap)是一种特定的堆,其最小层和最大层交替出现,根总是处于最小层。最小最大堆中的任一结点的关键字值总是在以它为根的子树中的所有元素中最小(或最大)。如图所示为一最小最大堆。(1)画出在图中插入关键字为5的结点后的最小最大堆。(2)画出在图中插入关键字为80的结点后的最小最大堆。(3)编写一算法实现最小最大堆的插入功能。假定最小最大堆存放在数组中,关键字为整数。
已知单链表L是一个递增有序表,试写一高效算法,删除表中值大于min且小于max的结点(若表中有这样的结点),同时释放被删结点的空间,这里min和max是两个给定的参数。
证明:对有向图的顶点适当地编号,可使其邻接矩阵为下三角形且主对角线为全O的充要条件是该图为无环图。
编写对有序表进行顺序查找的算法,并画出对有序表进行顺序查找的判定树。假设每次查找时的给定值为随机值,且查找成功和不成功的概率也相等,试求进行每一次查找时和给定值进行比较的关键字个数的期望值。
已知一算术表达式的中缀形式为A+B*C-D/E,后缀形式为ABC*+DE/一,其前缀形式为( )。
关于堆的一些问题:
栈和队列的主要区别在于( )。
用某种排序方法对线性表(25,84,21,47,15,27,68,35,20)进行排序时,元素序列的变化情况如下: (1)25,84,21,47,15,27,68,35,20 (2)20,15,21,25,47,27,68,35,84 (3)15,20,21,25,35,27,47,68,84 (4)15,20,21,25,27,35,47,68,84 其所采用的排序方法是( )。
采用分块查找时,若线性表中共有625个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块,则每块分为( )个结点最佳。
判断括号是否匹配是栈的主要应用之一。设字符表达式存储在数组E[n]中,‘#’为字符表达式的结束符。给出一个算法,用于判断表达式中括号(’(’和’)’)是否配对。要求:(1)给出算法的基本设计思想。(2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。
设森林F对应的二叉树为B,它有m个结点,B的根为P,P的右子树结点个数为n,森林F中第一棵树的结点个数是( )。
判断下列序列是否为堆,若不是堆,则把它们调整为堆。(1)(100,85,95,75,80,60,82,40,20,10,65)(2)(100,95,85,82,80,75,65,60,40,20,10)(3)(100,85,40,75,80,60,65,95,82,10,20)(4)(10,20,40,60,65,75,80,82,85,95,100)
