




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六章 练习1、试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。态。解:(1)3个结点的树:(2)3个结点的二叉树:2、已知一棵度为m的树中有个度为1的结点,个度为2 结点,个度为m的结点,问该树中有多少个叶子结点?解:由树的特征可知,除顶点外每个结点对应于一条边,总边数等于各顶点度数之和,所以有:所以: 3、对第1题所得的各种形态的二叉树,分别写出前序、中序和后序遍历的序列。解:(1) 前:ABC 中:BAC 后:BCA(2) 前:ABC 中:CBA 后:CBA(3) 前:ABC 中:BCA 后:CBA(4) 前:ABC 中:ABC 后:CBA(5) 前:ABC 中:ACB 后:
2、CBA 4、试以二叉链表作为存储结构,编写算法将二叉树中所有结点的左、右子树相互交换。void Bitree_Revolute(Bitree T)/交换所有结点的左右子树 T->lchild<->T->rchild; /交换左右子树 if(T->lchild) Bitree_Revolute(T->lchild); if(T->rchild) Bitree_Revolute(T->rchild); /左右子树再分别交换各自的左右子树/Bitree_Revolute 5、画出和下面树对应的二叉树: 6、画出和下面二叉树对应的森林: 7、写出判断给定
3、的二叉树是否是完全二叉树的算法。int IsFull_Bitree(Bitree T)/判断二叉树是否完全二叉树,是则返回1,否则返回0 InitQueue(Q); flag=0; EnQueue(Q,T); /建立工作队列 while(!QueueEmpty(Q) DeQueue(Q,p); if(!p) flag=1; else if(flag) return 0; else EnQueue(Q,p->lchild); EnQueue(Q,p->rchild); /不管孩子是否为空,都入队列 /while return 1;/IsFull_Bitree分析:该问题可以通过层序遍
4、历的方法来解决.不管当前结点是否有左右孩子,都入队列.这样当树为完全二叉树时,遍历时得到是一个连续的不包含空指针的序列.反之,则序列中会含有空指针. 8、根据栈的存储结构写出二叉树的非递归形式的先序遍历算法。解:void PreOrder_Nonrecursive(Bitree T)/先序遍历二叉树的非递归算法 InitStack(S); Push(S,T); /根指针进栈 while(!StackEmpty(S) while(Gettop(S,p)&&p) visit(p->data); push(S,p->lchild); /向左走到尽头 pop(S,p); if(!StackEmpty(S) pop(S,p); push(S,p->rchild); /向右一步 /while/PreOrder_Nonrecursive 9、假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论