1、设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结构,则该哈夫曼树中总共有()个空指针域。
哈夫曼树不存在入度为1 的结点,所以n0=n2+1
设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结构,则该哈夫曼树中总共有(2m)个空指针域; n0=m
树的二叉链表存储结构就是孩子-兄弟表示法。
孩子-兄弟表示法:数据域是结点,如A; 有两个指针域:1)指向长子 2)指向右兄弟
哈夫曼树的孩子-兄弟表示法的空指针域有三种情况:(1)叶子结点长子域一定为空m个(2)根节点的右兄弟域一定为空 1个 (3)除去根节点外,哈夫曼树的其余结点个数中有一半结点的右兄弟域为空 (n总-1)/2=n2
所以空指针域=m+1+n2=2m
哈夫曼树权值结点的父结点实际上是没有值的
2、设顺序循环队列Q[0: M-1]的头指针和尾指针分别为F和R.头指针F总是指向队头元素的前一位置.尾指针R总是指向队尾元素的当前位置.则该循环队列中的元素个数为:(R-F+M)%M
注意是循环队列,头可能在尾的后面,所以要+M%M
3、设有序顺序表中有n个数据元素,则利用二分查找法查找数据元素X的最多比较次数不超过(log2(n)+1)
因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:一次二分剩下:n/2,两次二分剩下:n/2/2 = n/4,m次二分剩下:n/(2^m),在最坏情况下是在排除到只剩下最后一个值之后得到结果,所以为,n/(2^m)=1;2^m=n;
4、设一棵m叉树中度数为0的结点数为N0 ,度为1的结点数为Nl ..,度数为m的结点数为Nm,则N0=(l+N2+2N3+3N4+……+(m-1)Nm)。
5、若不带头结点的单链表中,头指针为head,则该链表为空的判定条件是head==NULL 题目中给出的单链表head是不带头结点的单链表,头结点是指在单链表head第一个结点之前附设的一个结点,头结点的数据域可以不存放任何数据信息,而其指针域存放指向第一个结点的指针。在题目中告诉了我们,第一个结点的指针为head,而整个单链表的存储必须从第一个结点进行,如果链表为空,则说明第一个结点为空,因此链表为空的判定条件是head==NULL。
6、设二叉树中结点的两个指针域分别为 lchild 和 rchild,则判断指针变量 p 所指向的结点为叶子 结点的条件是___p->lchild==NULL && p->rchild==NULL
7、设一组初始记录关键字序列为 (20 , 12 , 42 , 31 , 18 , 14 , 28) ,则根据这些记录关键字构造的二叉排序树的平均查找长度是:19/7
二叉排序树构造方法不唯一,但平均查找长度是一样的;比如上图的ASL=层序号乘以该层对应的结点数的累加和再除以总结点=======(1+2*2+3*2+4*2)/7=19/7
8、设指针变量 p 指向双向循环链表中的结点 X ,则删除结点 X 需要执行的语句序列为 1 (设结点中的两个指针域分别为 llink 和 rlink )。 p->llink->rlink=p->rlink; p->rlink->llink=p->llink;