- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
作业5解答
树
作业5
一、单项选择题
1.表达式x*(y-z)+u的逆波兰式表示是( )。(南方名校经典试题)
A)xyzuu-+ B)xyz-*u+ C)xyz*-u+ D)+-*xyzu
【分析】表达式x*(y-z)+u的二叉树表示如图所示。
图 表达式x*(y-z)+u的二叉树表示
此树的后序遍历序列为:xyz-*u+,此序列为逆波兰式表示。
【答案:B】
2.一棵左右子树都不为空的二叉树在先序线索化后,其空链域数为( )。
A)0 B)1 C)3 D)不确定
【分析】对于线索二叉树,结点的指针域在有孩子时指向孩子,否则指向前驱或后继,对于先序序列,首结点为根结点,有左右孩子,尾结点为最右下侧的结点,无后继与右孩子,此结点的rchild域为空,可知只有一个指针域为空。
【答案:B】
3.设某二叉树前序为abdcef,中序为dbaecf,则此二叉树的后序为 ( )。(南方名校经典试题)
A)dbefca B)debfca C)dfebca D)dbfeca
【分析】由二叉树的前序为abdcef,所以根为a,而中序序列为dbaecf,可知左子树结点为db,右子树结点主ecf,如图所示。
图 画出二叉树的根
对二叉树的左右子树按同样方式进行分析,容易画出二叉树如图所示。
图 画出二叉树的左右子树
此二叉树的后序序列为:dbefca
【答案:A】
4.若一个具有N个顶点,K条边的无向图是一个森林(N>K),则该森林中必有( )棵树。(北方名校经典试题)
A)K B)N C)N-K D)1
【分析】因为一棵具有n个顶点的树有n-1条边,因此设此森林中有m棵树,每棵树具有的顶点数为vi(l≤i≤m),则:
v1+v2+…+vm=N (1)
(v1-1)+(v2-1)+…+(vm-1)=K (2)
由(1)-(2)可知N-K为森林所含树的棵数。
【答案:C】
二、综合题
1.设有表达式:a*(b-c)/d+f/(g+h*i),试给出此表达式的下面结果:(南方名校经典试题)
①二叉树表示;
②逆波兰式表示;
③中缀表示。
【解答】
①二叉树表示如图所示。
图 二叉树示意图
②逆波兰式表示:a b c - * d / f g h i * + / +
③中缀表示:a * b - c / d + f / g + h * i
2.有二叉树中序序列为:ABCEFGHD;后序序列为:ABFHGEDC;请画出此二叉树。(北方名校经典试题)
【解答】根据后序序列知根结点为C,所以左子树:中序序列为AB,后序序列为AB;右子树:中序序列为EFGHD,后序序列为FHGED,以此类推得该二叉树结构如图所示。
图 二叉树示意图
注意:此类题的解法是先根据后序序列找到根结点,然后分别得到左右子树的中序序列和后序序列,如此类推。
3.已知下列字符A、B、C、D、E、F、G的权值分别为3、12、7、4、2、8、11,试求对应哈夫曼树HT。(北方名校经典试题)
【解答】对应的哈夫曼树如图所示:
图 哈夫曼树示意图
4.假设二叉树中每个结点所含数据元素均为单字母,以二叉链表为存储结构,试编写算法按如图所示的树状显示二叉树。
图 二叉树的树有树状输出示意图
【解答】从上图来看,二叉树的第一层显示在第一列,第二层显示在第二列,第三层显示在第三列;每行显示一个结点,从上至下是先显示右子树,再显示根,最后最左子树,也就是以先遍历右子树,最后遍历左子树的中序遍历次序显示各结点。
C++语言版测试程序见5_2_4c++,具体算当如下:
template class Entry
void display_BT_with_tree_shape(Binary_treeEntry T)
{
aux_display_BT_with_tree_shapeEntry(T.get_root());
}
template class Entry
void aux_display_BT_with_tree_shape(Binary_nodeEntry *sub_root,int level = 1)
// 按树状形式显示二叉树,level为层次数,可设根结点的层次数为1
{
if(sub_root != NULL)
{ //空树不显式,只显式非空树
aux_display_BT_with_tree_shapeEntry(sub_root-right,level+1);//显示右子树
coutendl; //显示新行
for(int i=0;ilevel-1;i++)
cout ; //确保在第level列显示结点
cout
文档评论(0)