下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验十:高校本科招生最低录取分数线查询系统【问题描述】 二叉树采用二叉链表作存储结构,编程实现二叉树的如下基本操作:按先序序列构造一棵二叉链表表示的二叉树 T;对这棵二叉树进行遍历:先序、中序、后序以及层次遍历序列,分别输出结点的遍历序 列;求二叉树的深度/结点数目/叶结点数目;【数据描述】/ 二叉树的二叉链表存储表示 typedef struct BiTNodeTElemType data;Struct BiTNode * lchild, * rchild; /左右孩子指针BiTNode, * BiTree;【算法描述】建立一棵二叉树 BiTree CreateBiTree(BiTree &
2、T) / 算法6.4/ 按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树, /构造二叉链表表示的二叉树T。char ch;scanf(%c,&ch);if (ch=#) T = NULL;else if (!(T = (BiTNode *)malloc(sizeof(BiTNode) return ERROR; T-data = ch;/ 生成根结点CreateBiTree(T-lchild);/ 构造左子树CreateBiTree(T-rchild);/ 构造右子树return T; / CreateBiTree先序遍历二叉树递归算法void Preorder (BiTree T
3、, void( *visit)(TElemType& e) / 先序遍历二叉树if (T) visit(T-data); / 访问结点 Preorder(T-lchild, visit); / 遍历左子树 Preorder(T-rchild, visit);/ 遍历右子树中序遍历的递归算法void Inorder (BiTree T, void( *visit)(TElemType& e) / 中序遍历二叉树if (T) Inorder(T-lchild, visit); / 遍历左子树 visit(T-data); / 访问结点 Inorder(T-rchild, visit);/ 遍历右子
4、树后序遍历递归算法void Postorder (BiTree T, void( *visit)(TElemType& e) / 后序遍历二叉树if (T) Postorder(T-lchild, visit); / 遍历左子树 Postorder(T-rchild, visit);/ 遍历右子树 visit(T-data); / 访问结点中序遍历非递归算法之一Status InOrderTraverse(BiTree T, Status (*Visit)(ElemType) / 算法6.2/采用二叉链表存储结构,Visit是对数据元素操作的应用函数。 /中序遍历二叉树T的非递归算法,对每个数
5、据元素调用函数Visit。 stack S;BiTree p;InitStack(S); Push(S, T); / 根指针进栈while (!StackEmpty(S) while (GetTop(S, p) & p) Push(S, p-lchild); / 向左走到尽头 Pop(S, p);/ 空指针退栈if (!StackEmpty(S) / 访问结点,向右一步Pop(S, p);if (!Visit(p-data) return ERROR;Push(S, p-rchild);return OK; / InOrderTraverse中序遍历非递归算法之二Status InOrderT
6、raverse(BiTree T, Status (*Visit)(ElemType) / 算法 6.3/采用二叉链表存储结构,Visit是对数据元素操作的应用函数。/中序遍历二叉树T的非递归算法,对每个数据元素调用函数Visit。stack S;BiTree p;InitStack(S); p = T;while (p | !StackEmpty(S) if (p) Push(S, p); p = p-lchild; /非空指针进栈,继续左 进else / 上层指针退栈,访问其所指结点,再向右进Pop(S, p);if (!Visit(p-data) return ERROR;p = p-r
7、child;return OK; / InOrderTraverse7 层次遍历二叉树的非递归算法Status LevelOrder(BiTree T)按层次遍历二叉树T, Q为队列InitQueue(Q);If (T!=NULL)/ 若树非空EnQueue(Q,T);根结点入队列While (!QueueEmpty(Q)DeQueue(Q,b); /队首元素出队列Visit(b-data); /访问结点If (b-lchild!=NULL) EnQueue(Q,b-lchild);左子树非空,则入队列If (b-rchold!=Null) EnQueue(Q,b-rchild); 右子树非空
8、,则入队列/while/ifLevelOrder8 求二叉树的深度int depth(BiTree T)若T为空树,则深度为0否则其深度等于左子树或右子树的最大深度加1if (T=NULL) return 0;else dep1=depth(T-lchild);dep2=depth(T-rchild);return dep1dep2?dep1+1:dep2+1;【C 源程序】#include #include #define MAX 20#define NULL 0typedef char TElemType;typedef int Status;typedef struct BiTNodeT
9、ElemType data;struct BiTNode *lchild,*rchild;BiTNode,*BiTree;Status CreateBiTree(BiTree *T)char ch; ch=getchar();if (ch=#) (*T)=NULL;/* #代表空指针*/else (*T)=(BiTree) malloc(sizeof(BiTNode);/* 申请结点 */(*T)-data=ch;/*生成根结点 */CreateBiTree(&(*T)-lchild) ;/*构造左子树 */CreateBiTree(&(*T)-rchild) ;/*构造右子树 */retur
10、n 1;void PreOrder(BiTree T)if (T) printf(%2c,T-data); /*访问根结点,此处简化为输出根结点的数据值*/PreOrder(T-lchild); /*先序遍历左子树*/PreOrder(T-rchild); /*先序遍历右子树*/void LevleOrder(BiTree T)/*层次遍历二叉树T,从第一层开始,每层从左到右*/BiTree QueueMAX,b;/*用一维数组表示队列,front和rear分别表示队首和队尾指针 */BiTree QueueMAX,b;int front,rear;front=rear=0;/*根结点入队列*
11、/*当队列非空/*根结点入队列*/*当队列非空*/*队首元素出队列,并访问这个结点*/Queuerear+=T; while (front!=rear) b=Queuefront+;printf(%2c,b-data);if (b-lchild!=NULL) Queuerear+=b-lchild; /*左子树非空,则入队列*/ if (b-rchild!=NULL) Queuerear+=b-rchild; /*右子树非空,则入队列*/LevelOrderint depth(BiTree T) /*求二叉树的深度*/int dep1,dep2; if (T=NULL) return 0;el
12、se dep1=depth(T-lchild); dep2=depth(T-rchild); return dep1dep2?dep1+1:dep2+1;/depthmain()BiTree T=NULL;printf(nCreate a Binary Treen); CreateBiTree(&T); /*建立一棵二叉树 T*/ printf(nThe preorder is:n);PreOrder(T);/*先序遍历二叉树*/printf(nThe level order is:n);LevleOrder(T); /*层次遍历二叉树*/ printf(nThe depth is:%dn,depth(T); 【测试数据】输入:#/,建立一棵空树,先序遍历和层次遍历没有输出,树的深度输出为 0输入:A/先序和层次遍历输出均为 A;深度输出为: 1输入:ABC#DE#G#F#/,先序输出为: AB C D E G F层次遍历输出为: A B C D E F G深度输出为: 5二叉树中叶子结点的个数: 3二叉树中以值为 B 的结点为根的子树深度: 4 【说明】1. 按先序次序输入二叉树中结点的值,用#表示空树,对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学园艺(观赏园艺学)试题及答案
- 2025年中职安全技术管理(安全生产法规)试题及答案
- 2025年高职模具设计与制造(模具设计制造)试题及答案
- 2025年大学油气储运技术(安全管理)模拟试题
- 2025年中职(老年服务与管理)老年人心理护理阶段测试试题及答案
- 2025年高职地理学(人文地理学)试题及答案
- 2025年中职药品经营与管理(药品经营管理)试题及答案
- 2025年大学(软件工程)Java程序设计阶段测试卷
- 2025年本科护理学(外科护理)试题及答案
- 2025年大学四年级(公共事业管理)公共项目评估试题及答案
- 2025中数联物流科技(上海)有限公司招聘笔试历年参考题库附带答案详解
- 湖南佩佩教育战略合作学校2026届高三1月第二次联考语文试题
- 幼儿园家长学校培训课件
- 电气控制及PLC应用-项目化教程 课件 2.1 项目二 认识三菱系列PLC
- 优衣库的论文
- RECP的课件教学课件
- 请做饭人员合同协议
- 864《商务英语4》开放大学期末考试机考题库(按拼音)
- 2025智慧园区建设运营模式创新与经济效益分析
- 农民种花生的课件
- 生产管理存在的主要问题和对策分析
评论
0/150
提交评论