习题.docx
- 文档编号:8979331
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:18
- 大小:90.69KB
习题.docx
《习题.docx》由会员分享,可在线阅读,更多相关《习题.docx(18页珍藏版)》请在冰豆网上搜索。
习题
习题5
一、选择题
1、以下说法错误的是( )。
A、完全二叉树上结点之间的父子关系可由它们编号之间的关系来表达。
B、在三叉链表上,二叉树的求双亲运算很容易实现。
C、在二叉链表上,求根,求左、右孩子等很容易实现。
D、在二叉链表上,求双亲运算的时间性能很好。
2、深度为6的二叉树最多有( )个结点。
A、64B、63C、32D、31
3、任何一棵二叉树的叶结点在其先序、中序、后序遍历序列中的相对位置( )。
A、肯定发生变化。
B、有时发生变化。
C、肯定不发生变化。
D、无法确定。
4、设深度为k的二叉树上只有度为0和度为2的结点,则这类二叉树上所含结点总数最少( )个。
A、k+1B、2kC、2k-1D、2k+1
5、下列说法正确的是( )。
A、任何一棵二叉树中至少有一个结点的度为2。
B、任何一棵二叉树中每个结点的度都为2。
C、任何一棵二叉树中树的度肯定等于2。
D、任何一棵二叉树中树的度可以小于2。
6、一棵二叉树满足下列条件:
对任意结点,若存在左、右子树,则其值都小于它的左子树上所有结点的值,而大于右子树上所有结点的值。
现采用( )遍历方式就可以得到这棵二叉树所有结点的递增序列。
A、先序遍历B、中序遍历C、后序遍历D、层次遍历
7、已知某二叉树的后序遍历序列是dabec,中序遍历序列是deabc,它的前序遍历序列是()。
A、acbedB、deabcC、decabD、cedba
8、某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,则其后序遍历的结点访问顺序是( )。
A、bdgcefhaB、gdbecfhaC、bdgechfaD、gdbehfca
9、某二叉树的前序和后序序列正好相反,则该二叉树一定是( )的二叉树。
A、空或只有一个结点B、高度等于其结点数
C、任一结点无左孩子D、任意结点无右孩子
10、设二叉树有n个结点,则其深度为( )。
A、n-1B、nC、
D、无法确定
11、对含有( )个结点的非空二叉树,采用任何一种遍历方式,其结点访问序列均相同。
A、1B、2
C、3D、不存在这样的二叉树
12、以下说法错误的是( )。
A、哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。
B、若一个二叉树的树叶是某子树的中序遍历序列中的第一个结点,则它必是该子树的后序遍历序列中的第一个结点。
C、已知二叉树的前序遍历和后序遍历序列并不能惟一地确定这棵树,因为不知道树的根结点是哪一个。
D、在前序遍历二叉树的序列中,任何结点的子树的所有结点都是直接跟在该结点的之后。
13、一棵完全二叉树上有1001个结点,其叶子结点的个数是()。
A、250B、500C、501D、505
14、以下说法错误的是( )。
A、一般在哈夫曼树中,权值越大的叶子离根结点越近。
B、哈夫曼树中没有度数为1的分支结点。
C、若初始森林中共有n棵二叉树,最终求得的哈夫曼树共有2n-1个结点。
D、若初始森林中共有n棵二叉树,进行2n-1次合并后才能剩下一棵最终的哈夫曼树。
15、下列说法正确的是( )。
A、树的先根遍历序列与其对应的二叉树的先根遍历序列相同。
B、树的先根遍历序列与其对应的二叉树的后根遍历序列相同。
C、树的后根遍历序列与其对应的二叉树的先根遍历序列相同。
D、树的后根遍历序列与其对应的二叉树的后根遍历序列相同。
16、设森林T中有4棵树,第一、二、三、四棵树的结点个数分别是n1,n2,n3,n4,那么当把森林T转换成一棵二叉树后,根结点的右子树上有( )个结点。
A、n1-1B、n1
C、1+n2+n3D、n2+n3+n4
17、森林T中有4棵树,第一、二、三、四棵树的结点个数分别是n1,n2,n3,n4,那么当把森林T转换成一棵二叉树后,根结点的左子树上有( )个结点。
A、n1-1B、n1
C、1+n2+n3D、n2+n3+n4
18、树使用孩子链表的存储结构的优点之一是()比较方便。
A、判断两个指定结点是不是兄弟
B、找指定结点的双亲
C、判断指定结点在第几层
D、计算指定结点的度数
二、解答题
1、已知一棵度为m的树中有n1个度为1的结点,n2个度为2的结点,...,nm个度为m的结点,问该树中有多少片叶子?
2、假设在树中,结点x是结点y的双亲时,用(x,y)来表示树边。
已知一棵树边的集合为{(i,m),(i,n),(e,i),(b,e),(b,d),(a,b),(g,j),(g,k),(c,g),(c,f),(h,l),(c,h),(a,c)}用树形图表示法画出此树,并回答下列问题:
(1)哪个结点是根结点?
(2)哪些结点是叶结点?
(3)哪个结点是g的双亲?
(4)哪些结点是g的祖先?
(5)哪些结点是g的孩子?
(6)哪些结点是e的子孙?
(7)哪些结点是e的兄弟?
哪些结点是f的兄弟?
(8)结点b和n的层数各是多少?
(9)树的深度是多少?
(10)以结点c为根的子树的深度是多少?
(11)树的度数是多少?
3、高度为h的完全二叉树至少有多少个结点?
至多有多少个结点?
4、在具有n个结点的k叉树(k>=2)的k叉链表表示中,有多少个空指针?
5、试找出分别满足下面条件的所有二叉树:
(1)前序序列和中序序列相同;
(2)中序序列和后序序列相同;
(3)前序序列和后序序列相同;
(4)前序、中序、后序序列均相同。
6、画出以下所示各二叉树的二叉链表。
7、分别写出上题所示各二叉树的前序、中序和后序序列。
8、若二叉树中各结点的值均不相同,则由二叉树的前序序列和中序序列,或由其后序序列和中序序列均能唯一地确定一棵二叉树,但由前序序列和后序序列却不一定能唯一地确定一棵二叉树。
(1)已知一棵二叉树的前序序列和中序序列分别为ABDGHCEFI和GDHBAECIF,请画出此二叉树。
(2)已知一棵二叉树的在序序列和后序序列分别为BDCEAFHG和DECBHGFA,请画出此二叉树。
9、试画出第6题所示的二叉树(d)的前序、中序和后序线索二叉树及相应的线索链表。
10、在何种线索树中,线索对求指定结点在相应次序下的前驱和后继并无帮助?
11、对如下所示的森林:
(1)求各树的前序序列和后序序列;
(2)求森林的前序序列和后序序列;
(3)将此森林转换为相应的二叉树;
(4)给出(a)所示树的以亲链表表示、孩子链表表示、双亲孩子链表表示及孩子兄弟链表示等四种存储结构,并指出哪些存储结构易于求指定结点的祖先,哪些易于求指定结点的后代?
12、画出如下所示的各二叉树所对应的森林。
13、高度为h的严格二叉树至少有多少个结点?
至多有多少个结点?
14、在什么样的情况下,等长编码是最优的前缀码?
15、下述编码哪一组不是前缀码?
{00,01,10,11},{0,1,00,11},{0,10,110,111}
16、假设用于通信的电文由字符集{a,b,c,d,e,f,g,h}中的字母构成,这8个字母在电文中出现的概率分别为{0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10}。
(1)为这8个字母设计哈夫曼编码。
(2)若用这三位二进制数(0…7)对这8个字母进行等长编码,则哈夫曼编码的平均码长是等长编码的百分之几?
它使电文总长平均压缩多少?
三、算法设计题
1、以二叉链表为存储结构,分别写出求二叉树高度及宽度的算法,所谓宽度是指二叉树的各层上,具有结点数最多的那一层上的结点总数。
2、以二叉链表为存储结构,写一算法对二叉树进行层次遍历。
提示:
应使用队列来保存各层的结点。
3、以线索链表作为存储结构。
分别写出在前序线索树中查找给定结点*p的前序后继,以及在后序线索树中查找*p的后序前趋的算法。
习题5参考答案
一、单项选择题
1、D2、B3、C4、C5、D6、B
7、D8、D9、B10、D11、A12、C
13、C14、D15、A16、D17、A18、D
二、解答题
1、解:
设该树中的叶子数为n0个。
该树中的总结点数为n个,则有:
n=n0+n1+n2+…+nm
另一方面,1度结点有一个孩子,2度结点有两个孩子,...,m度结点有m个孩子,故树中孩子结点总数是:
nl+2•n2+...+m•nm,而树中只有根结点不是任何结点的孩子,故树中的结点总数又可表示为:
n=nl+2•n2+...+m•nm+1
综合以上两个式子得到:
n0=1+0•n1+1•n2+2•n3+...+(m-1)•nm
即叶子结点数共有:
1+0•n1+1•n2+2•n3+...+(m-1)•nm个。
1、解答:
该树的树形图表示如下:
(1)a是根结点。
(2)d,f,j,k,l,m,n是叶结点。
(3)c是g的双亲。
(4)a,c是g的祖先。
(5)j,k是g的孩子。
(6)i,m,n是e的子孙。
(7)d是e的兄弟,g,h是f的兄弟。
(8)结点b和n的层数各是2和5。
(9)树的深度是5。
(10)以结点c为根的子树的深度是3。
(11)树的度数是3。
3、解:
高度为h的完全二叉树至少有2h-1个结点,至多有2h-1个结点(也就是满二叉树)。
4、解:
n个结点的k叉树共有n*k个指针域,已使用的指针域为n-1,所以空指针的个数为:
n(k-1)+1。
5、答:
(1)前序序列和中序序列相同的二叉树是:
空二叉树或每个结点都没有左子树的二叉树(右单支树)。
(2)中序序列和后序序列相同的二叉树是:
空二叉树或每个结点都没有右子树的二叉树(左单支树)。
(3)前序序列和后序序列相同的二叉树是:
空二叉树或只有根结点的二叉树。
(4)前序、中序、后序序列均相同的二叉树:
空二叉树或只有根结点的二叉树。
6、解:
二叉树(a),(b)的二叉链表如下((c),(d)略):
7、解:
(a)前序序列:
12345,中序序列:
24531 ,后序序列:
54321。
(b)前序序列:
12345,中序序列:
13542,后序序列:
54321。
(c)前序序列:
12357864 ,中序序列:
17583524,后序序列:
78563421。
(d)前序序列:
124735689,中序序列:
742153896,后序序列:
742589631。
8、解:
(1)已知二叉树的前序序列为ABDGHCEFI和中序序列GDHBAECIF,则可以根据前序序列找到根结点为A,由此,通过中序序列可知它的两棵子树包分别含有GDHB和ECIF结点,又由前序序列可知B和C分别为两棵子树的根结点...以此类推可画出所有结点,该二叉树如下左图。
(2)以同样的方法可画出该二叉树如上右图。
9、答:
前序线索二叉树:
前序线索链表:
NULL
其它:
略。
10、答:
分别在前序线索二叉树和后序线索二叉树中查找前驱和后继时,线索无帮助作用。
11、解:
(1)(a)的前序序列:
ABCDEF后序序列:
BDEFCA
(b)的前序序列:
GHIJK后序序列:
IJKHG
(c)的前序序列:
LMPQRNO后序序列:
QRPMNOL
(2)此森林的前序序列:
ABCDEFGHIJKLMPQRNO
此森林的后序序列:
BDEFCAIJKHGQRPMNOL
(3)森林转化为二叉树:
略。
(4)略。
12、解:
略。
13、答:
所谓严格二叉树是指该树中没有度数为1的分支结点的二叉树。
所以,高度为h的的严格二叉树至少有2h-1个结点;至多有2h-1个结点(即满二叉树)。
14、答:
在每个字符的使用概率相同的情况下,也即在哈夫曼树中每片叶子的权重相等的时候,等长编码是最优的前缀码。
15、答:
第二组不是前缀码。
因为0,1分别是00和11的前缀。
(前缀码是指该编码集中的任一编码不是其他编码的前缀)
16、解:
(1)哈夫曼编码
根据哈夫曼树可得编码表:
a:
1001,b:
01,c:
10111,d:
1010,e:
11,f:
10110,g:
00,h:
1000。
(2)用三位二进行数进行的等长编码平均长度为3,而根据哈夫曼树编码的平均码长为:
4*0.07+2*0.19+5*0.02+4*0.06+2*0.32+5*0.03+2*0.21+4*0.10=2.61
2.61/3=0.87=87%
其平均码长是等长码的87%。
所以平均压缩率为13%。
三、算法设计题
1、解:
(1)根据递归定义,二叉树的高度为:
当为空树时,高度为0;
当只有一个结点时,高度为1;
其他情况:
高度为max(根的左子树高度,根的右子树高度)+1。
intHeight(BinTreeT)
{
inthl,hr;
if(T)
{//非空树
if(t->lchild==NUll)&&(t->rchild==NULL)//只含一个根结点
return1;
else
{
hl=height(t->lchild);//根的左子树高度
hr=height(t->rchild);//根的右子树高度
if(hl>=hr)
returnhl+1;
elsereturnh2+1;
}
}
elsereturn0;
}
(2)要求二叉树的宽度的话,则可根据树的高度设置一个数组temp。
temp[i]用于存放第i层上的结点数(即宽度)。
在访问结点时,把相应计算该结点下一层的孩子数并存入相应数组元素中,遍历左子树后向上返回一层计算右子树的宽度,并取出最大的一个数组元素作为树的宽度。
#defineM10//假设二叉树最多的层数
intWidth(BinTreeT)
{
intstaticn[M];//向量存放各层结点数
intstatici=1;
intstaticmax=0;//最大宽度
if(T)
{
if(i==1)//若是访问根结点
{
n[i]++;//第1层加1
i++;//到第2层
if(T->lchild)//若有左孩子则该层加1
n[i]++;
if(T->rchild)//若有右孩子则该层加1
n[i]++;
}
else
{//访问子树结点
i++;//下一层结点数
if(T->lchild)
n[i]++;
if(T->rchild)
n[i]++;
}
if(max Width(T->lchild);//遍历左子树 i--;//往上退一层 Width(T->rchild);//遍历右子树 } returnmax; }//算法结束 2、答: #defineM100//假设结点数最多为100 typedefcharDataType;//队列结点值类型 typedefstruct//定义一个队列 { intfront; intrear; intcount; DataTypedata[M]; }QBTree; staticQBTreeQ;//设一全局静态变量保存遍历结果 voidLevelorder(BinTreeT) {//层次遍历 if(T) { if(QueueEmpty(&Q)) {//根结点及子树结点入队 EnQueue(&Q,T->data); if(T->lchild) EnQueue(&Q,T->lchild->data); if(T->rchild) EnQueue(&Q,T->rchild->data); } else {//子树结点入队 if(T->lchild) EnQueue(&Q,T->lchild->data); if(T->rchild) EnQueue(&Q,T->rchild->data); } Levelorder(T->lchild);//遍历左子树 Levelorder(T->rchild);//遍历右子树 } } 3、解: 算法如下: BinThrNode*SearchPostInPre(BinThrNode*p) {//查找结点*p的前序后继 if(p) { if(p->rtag==Link)&&(p->ltag==link)//当左、右都为孩子指针 returnp->lchild;//*p的前序后继为左孩子 elsereturnp->rchild; } } BinThrNode*SearchPreInPost(BinThrNode*p) { //查找*p结点的后序前趋 if(p) { if(p->ltag==thread)||(p->rtag==thread)//当有左线索或无有孩子 returnp->lchild; //*p的后续前趋为p->lchild elsereturnp->rchild; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题