《数据结构》第六章作业参考答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档