已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于二叉树的二叉链表存储结构实现以下操作:1、 用先序遍历创建二叉树2、 对二叉树进行非递归遍历(先序、中序、后序)3、 求二叉树所有结点和叶子结点个数4、 求二叉树的深度5、 #includestdio.h#includemalloc.h#includemath.h#includestdlib.h#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0/#define OVERFLOW #define NULL 0typedef int Status;typedef char TElemType;typedef struct BiTNodeTElemType data;struct BiTNode *lchild,*rchild;BiTNode, *BiTree;typedef BiTree SElemType;/tepedef BiNode SElemType;/#define MAX_TREE_SIZE 100/typedef TElemtype SqBiTreeMAX_TREE_SIZE ;/SqBiTree bt;typedef structSElemType *base;SElemType *top;int stacksize;SqStack;#define STACK_INIT_SIZE 100#define STACKINCREMENT 10Status InitStack(SqStack &S)S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;Status GetTop(SqStack S,SElemType &e)if(S.top=S.base) return ERROR;e=*(S.top-1);return OK;Status Push(SqStack &S,SElemType e)if(S.top-S.base=S.stacksize)S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType);if(!S.base)exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;return OK;Status Pop(SqStack &S,SElemType &e)if(S.top=S.base)return ERROR;e=*-S.top;return OK;Status StackEmpty(SqStack S)if(S.top=S.base)return TRUE;else return FALSE;Status CreateBiTree(BiTree &T)/按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,/构造二叉链表表示的二叉树T。char ch;scanf(%c,&ch);if(ch=)T=NULL;elseif(!(T=(BiTNode*)malloc(sizeof(BiTNode)exit(OVERFLOW);T-data=ch;CreateBiTree(T-lchild);CreateBiTree(T-rchild);return OK;/CreateBiTreeStatus PreoderTraverse(BiTree T)/二叉树先序遍历非递归算法SqStack S;BiTree p;InitStack(S); p=T;while(p|!StackEmpty(S)if(p)printf(%ct,p-data);p=p-lchild;Push(S,p-rchild);elsePop(S,p);return OK;/ PostoderTraverseStatus InoderTraverse(BiTree T)/二叉树中序遍历非递归算法SqStack S;BiTree p;InitStack(S); p=T;while(p|!StackEmpty(S)if(p)Push(S,p);p=p-lchild;elsePop(S,p);printf(%ct,p-data);p=p-rchild;return OK;/InoderTraverse/Algorithm:先沿着左指针走到二叉树中最左下的结点,将沿途经过的根节点指针进/栈,若右子树为空,则弹栈并访问根节点,否则,跳到右子树上。/Status PostoderTraverse(BiTree T)/ 二叉树的后序遍历非递归算法 SqStack S; BiTree p,q; char flag;/标记访问过的节点 InitStack(S); p=T; q=(BiTree)malloc(sizeof(BiTNode); while (p|!StackEmpty(S) if(p!=q) while(p) /当子树p不为空时 进栈 Push(S,p); if(p-lchild)p=p-lchild; /不为空 后移指向左子树 else p=p-rchild; /为空指向 右子树 if (StackEmpty(S)break; GetTop(S,q); if(q-rchild=p) /判断是 遍历过 右子树 如遍历过右子树 说明该遍历根子树 p=(BiTree)malloc(sizeof(BiTNode); Pop(S,p); printf(%c,p-data); p=q; flag = p-data; /记录 遍历过的子树 else p=q-rchild; if (flag = p-data)/如果根节点的右子树刚刚访问完成,那么记录根节点。 p=(BiTree)malloc(sizeof(BiTNode); Pop(S,p); printf(%c,p-data); p=q; flag = p-data; return OK;int size(BiTree T)if(!T)return 0;else return 1+size(T-lchild)+size(T-rchild);/计算二叉树结点数目int num=0;void Leaf(BiTree T)if(T)if(T-lchild=NULL&T-rchild=NULL)num+;Leaf(T-lchild);Leaf(T-rchild);/计算二叉树中的叶子数目int Depth(BiTree T)int h,lh,rh;if(T=NULL)h=0;elselh=Depth(T-lchild);rh=Depth(T-rchild);if(lhrh)h=lh+1;else h=rh+1;return h;/计算二叉树的深度void main()BiTree T;int xz=1;int sd;while(xz)printf(建立二叉树并求指定结点路径 n);printf(= n);printf(1.建立二叉树的存储结构 n); printf(2.二叉树的基本操作 n);printf(0.退出系统 n);printf(= n);printf(请选择:(0-2) n);scanf(%d,&xz);getchar();switch(xz)/输入:ABCDEGF 输出:CBEGDFAcase 1:printf(输入二叉树的先序序列结点值: n);CreateBiTree(T);printf(二叉树的链式存储结构建立完成! n);printf(n);break; case 2:printf(该二叉树的先序遍历序列是: n);PreoderTraverse(T);printf(n); printf(该二叉树的中序遍历序列是: n);InoderTraverse(T);printf(n);printf(该二
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年鹤壁辅警协警招聘考试真题附答案详解(培优a卷)
- 2025年阜新辅警招聘考试真题及答案详解(历年真题)
- 2025年黄山辅警协警招聘考试备考题库含答案详解(培优a卷)
- 2025年鄂尔多斯辅警招聘考试题库及一套完整答案详解
- 2025年盐城辅警招聘考试题库及答案详解(名校卷)
- 2025年肇庆辅警招聘考试题库及完整答案详解
- 2025年渭南辅警招聘考试题库附答案详解(典型题)
- 2025年达州辅警招聘考试真题完整参考答案详解
- 2025年潍坊辅警招聘考试题库附答案详解(完整版)
- 2025年阳江辅警招聘考试真题含答案详解(综合卷)
- 结直肠癌围手术期护理
- 装配式建筑混凝土构件深化设计任务预制柱的深化设计课件
- 物业公司安全生产事故应急预案汇编
- 绿色仓储的实施策略与计划
- 医院保安服务投标方案投标文件(技术方案)
- 如何拍一张好的照片课件
- 小学生冬季流感预防主题班会
- 2025年医疗机构人力资源外包服务合同样本
- 校家社协同育人专题家长培训
- 如何撰写证券研究报告
- 2025年度农夫山泉与知名餐饮企业联合供应协议合同4篇
评论
0/150
提交评论