?A、 A*B+C/D—E+F? B、 AB*C+D/E—F+? C、 ABC+*DE—F+/? D、 ABCDED*+/-+
14、在线索二叉树中,t所指结点没有左子树得充要条件就是( ).
A、 t—〉left==NULL ??B、 t—>ltag==1? C、 t—>ltag==1&&t->left==NULL D、 以上都不对
15、任何一棵二叉树得叶结点在先序、中序与后序遍历序列中得相对次序( )。
A、 不发生改变 ???B、 发生改变 ?C、 不能确定 ? D、 以上都不对 16、假定在一棵二叉树中,度为2得结点数为15,度为1得结点数为30,则叶子结点数为( )个。 A、 15 ?B、 16??C、 17 ?D、 47 17、在下列情况中,可称为二叉树得就是( B )。 A、 每个结点至多有两棵子树得树 ??B、 哈夫曼树 ??
C、 每个结点至多有两棵子树得有序树?? D、 每个结点只有一棵子树
18、用顺序存储得方法,将完全二叉树中所有结点按层逐个从左到右得顺序存放在一维数组R[1、、n]中,若结点R[i]有左孩子,则其左孩子就是( )。
A、 R[2i—1] B、 R[2i+1]? ?C、 R[2i]? ?D、 R[2/i]
19、下面说法中正确得就是( )。
A、 度为2得树就是二叉树 ??? B、 度为2得有序树就是二叉树 ?
C、 子树有严格左右之分得树就是二叉树??? D、 子树有严格左右之分,且度不超过2得树就是二叉树
20、树得先根序列等同于与该树对应得二叉树得( )。
A、 先序序列 B、 中序序列 ? C、 后序序列 D、 层序序列
21、按照二叉树得定义,具有3个结点得二叉树有( C )种。
A、 3 B、 4 ?C、 5??D、 6
22、由权值为3,6,7,2,5得叶子结点生成一棵哈夫曼树,它得带权路径长度为( A )。
A、 51????B、 23 ??C、 53 D、 74 二、判断题
( )1、存在这样得二叉树,对它采用任何次序得遍历,结果相同。
( )2、中序遍历一棵二叉排序树得结点,可得到排好序得结点序列。
( )3、对于任意非空二叉树,要设计其后序遍历得非递归算法而不使用堆栈结构,最适合得方法就是对该二叉树采用三叉链表。
( )4、在哈夫曼编码中,当两个字符出现得频率相同时,其编码也相同,对于这种情况应做特殊处理。
(√ )5、一个含有n个结点得完全二叉树,它得高度就是?log2n?+1。 (√ )6、完全二叉树得某结点若无左孩子,则它必就是叶结点。 三、填空题
1、具有n个结点得完全二叉树得深度就是 ?log2n?+1 .
2、哈夫曼树就是其树得带权路径长度 最小 得二叉树。
3、在一棵二叉树中,度为0得结点得个数就是n0,度为2得结点得个数为n2,则有n0= N2+1 。
4、树内各结点度得 最大值 称为树得度。 四、代码填空题
1、函数InOrderTraverse(Bitree bt)实现二叉树得中序遍历,请在空格处将算法补充完整。 void InOrderTraverse(BiTree bt){ ? if( ){ ? ?InOrderTraverse(bt—〉lchild); ?? printf(“%c”,bt—〉data); ?? ; ??}
?}
2、函数depth实现返回二叉树得高度,请在空格处将算法补充完整。 int depth(Bitree *t){ ??if(t==NULL) ?? return 0; else{ ??hl=depth(t—>lchild);
???hr= depth(t—〉rchild) ; ???if( hl〉hr ) ?? return hl+1; ? ?else ? return hr+1; ???} ?}
3、写出下面算法得功能。 Bitree *function(Bitree *bt){ Bitree *t,*t1,*t2; if(bt==NULL) ??t=NULL; ?else{ ??t=(Bitree *)malloc(sizeof(Bitree)); ???t—〉data=bt-〉data; ? ?t1=function(bt->left); ?? t2=function(bt-〉right); ???t->left=t2;
???t—〉right=t1; } ? return(t); }
答案:交换二叉树结点左右子树得递归算法 4、写出下面算法得功能.
void function(Bitree *t){ if(p!=NULL){ function(p—〉lchild); function(p->rchild); printf(“%d”,p-〉data);
} }
答案:二叉树后序遍历递归算法 五、综合题