《数据结构》第六章作业参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六章 树和二叉树
6.3
6.14
(a)右单支树 (b)
左单支树
(c)只有根结点的二叉树 6.15
后序遍历序列:GDBEHFCA
后序线索二叉树
6.19 (b)
(c)
具有3个结点的树的形态有两种:
具有3个结点的二叉树形态有五种
(d)
6.21
(a)
(b)
(c)
(d)
(e)
6.22
(1) (a)A (b)ABC (c)ABC (d)ABCEIJFGKHD (2) (a)A (b)CBA (c)BCA (d)BIJEFKGHCDA
6.26
赫夫曼树
提高通信信道的利用率,提高报文发送速度和节省存储空间。
6.27
6.42
解:依题意:计算一棵二叉树的叶子结点数的递归模型如下: ⎪⎩
⎪
⎨⎧>-+>-==>-=>-===其它
且若若)()()(1
)(0)(rchild b f lchild b f b f NULL rchild b NULL lchild b b f NULL
b b f
int LeafCount_BiTree(Bitree T)//求二叉树中叶子结点的数目
{
if(!T) return 0; //空树没有叶子
else if(!T->lchild && !T->rchild) return 1; //叶子结点
else
return Leaf_Count(T->lchild)+Leaf_Count(T->rchild);//左子树的叶子数加上右子树的叶子数}//LeafCount_BiTree
6.43
void Bitree_Revolute(Bitree T)//交换所有结点的左右子树
{ if(T)
{
T->lchild<->T->rchild; //交换左右子树
Bitree_Revolute(T->lchild);
Bitree_Revolute(T->rchild); //左右子树再分别交换各自的左右子树
}
}//Bitree_Revolute
6.47
void LayerOrder(Bitree T)//层序遍历二叉树
{
InitQueue(Q); //建立工作队列
if(T) EnQueue(Q,T);
while(!QueueEmpty(Q))
{
DeQueue(Q,p);
visit(p->data);
if(p->lchild) EnQueue(Q,p->lchild);
if(p->rchild) EnQueue(Q,p->rchild);
}
}//LayerOrder
6.56
BTNode *PreOrder_Next(BTNode *p)//在先序后继线索二叉树中查找结点p的先序后继,并返回指针
{
if(p->RTag==Thread)
return p->rchild;
else if(p->lchild) return p->lchild;
else return p->rchild;
}//PreOrder_Next