全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验四 树和二叉树的应用 #include “stdio.h“ #include “stdlib.h“ #define STACK_INIT_SIZE 10 /栈的初始长度 #define STACKINCREMENT 5 /栈的追加长度 typedef struct bitree char data; struct bitree *lchild,*rchild; bitree; /二叉树结点定义 typedef struct bitree *base; bitree *top; int stacksize; sqstack; / 链栈结点定义 top 栈顶 base 栈底 且栈元素是指向二叉树结点 的二级指针 /建立一个空栈 int initstack(sqstack *s) s-base=(bitree *)malloc(STACK_INIT_SIZE*sizeof(bitree); /栈底指向开辟空间 if(!s-base) exit(1); /抛出异常 s-top=s-base; /栈顶=栈尾 表示栈空 s-stacksize=STACK_INIT_SIZE; /栈长度为开辟空间大小 return 1; /进栈 int push(sqstack *s,bitree *e) if(s-top-s-base=s-stacksize) /如果栈满 追加开辟空间 s-base=(bitree *)realloc (s-base,(s-stacksize+STACKINCREMENT)* sizeof(bitree); if(!s-base) exit(1); /抛出异常 s-top=s-base+s-stacksize; /感觉这一句没用 s-stacksize+=STACKINCREMENT; *(s-top)=e;s-top+; /进栈 栈顶后移 return 1; /出栈 int pop(sqstack *s,bitree *e) if(s-top=s-base) return 0; /栈空 返回 0 -s-top;*e=*(s-top); /栈顶前移 取出栈顶元素给 e return 1; /取栈顶 int gettop(sqstack *s,bitree *e) /去栈顶元素 注意 top 指向的是栈顶的后一 个 if(s-top=s-base) return 0; /所以 s-top-1 *e=*(s-top-1); return 1; /*-非递归-先序建立二叉树-*/ bitree *createprebitree() char ch;bitree *ht,*p,*q; sqstack *s; s=malloc(sizeof(bitree); /加上这一句为 s 初始化开辟空间 ch=getchar(); if(ch!=# ht-data=ch; ht-lchild=ht-rchild=NULL; p=ht; initstack(s); push(s,ht); /根节点进栈 while(ch=getchar()!=n) / 算 if(ch!=#) q=(bitree *)malloc(sizeof(bitree); / 法 q-data=ch; / if(p=*(s-top-1) p-lchild=q; / 核 else p-rchild=q; / push(s,q);p=q; / 心 / else if(p=*(s-top-1) p-lchild=NULL; / 的 else p-rchild=NULL; / pop(s, / 步 / / 骤 return ht; else return NULL; /*-递归- 先序建立二叉树-*/ void CreateBiTree(bitree *T) /按先序次序输入二叉树中的结点的值(一个字符) ,空格字符表示空树, /构造二叉链表表示二叉树 char ch; scanf(“%c“, if(ch=#) *T=NULL; else *T=(bitree * )malloc(sizeof(bitree); if(!*T) exit(1); (*T)-data=ch; /生成根结点 CreateBiTree( /构造左子树 CreateBiTree( /构造右子树 /*-非递归-中序建立二叉树-*/ /*-递归- 中序建立二叉树-*/ /*-非递归-后序建立二叉树-*/ /*-递归- 后序建立二叉树-*/ /*-非递归-先序输出二叉树-*/ void preordertraverse(bitree *h) sqstack m; initstack( while(h|m.base!=m.top) if(h) push(printf(“%c“,h-data);h=h-lchild; elsepop( h=h-rchild; /*-非递归-中序输出二叉树-*/ void inordertraverse(bitree *h) sqstack m; initstack( while(h|m.base!=m.top) if(h) push(h=h-lchild; else pop( printf(“%c“,h-data); h=h-rchild; /*-非递归-后序遍历二叉树-*/ void postordertraverse(bitree *h) sqstack m; initstack( while(h|m.base!=m.top) if(h) push( h=h-lchild; else bitree *r; /使用 r 结点表示访问了右子树 代替标志域 gettop( if(h-rchild push( h=h-lchild; elsepop( printf(“%c“,h-data); r=h;h=NULL; /层次遍历二叉树 用队列 哈哈以后做 /*-主过程-*/ int main() bitree *ht; printf(“先序非递归建立一个二叉树:“); if(ht=createprebitree()!=NULL) /非递归建立 /CreateBiTree( /if(ht!=NULL) /递归建立 printf(“先序遍历输出二叉树:“); preordertraverse(ht); putchar(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《肺栓塞诊疗及护理》课件
- 【创新设计】2021届高考化学(广东专用)一轮总复习限时训练:第四章-课时1-碳、硅及其化合物
- 【创新设计】2022年高三生物(人教版)一轮复习-基础课时案33-种群的特征和数量变化-考点探究
- 【同步备课】2020年高中物理教学设计(新人教必修二)7.4《重力势能》2
- 【名师一号】2020-2021学年新课标B版高中数学必修5-第一章-解三角形-测试题
- 【名师课堂-备课包】2013-2020学年高一下学期化学人教版必修2教案-第三章第1节
- 【同步课堂】2020年化学人教版选修5教案:1-1-有机化合物的分类
- 《创新心理学》课件
- 小学五年级下册科学教学计划:启发创造的思维能力
- 《从语言的适切性》课件
- 培养学生深度思考的能力
- 中医医院运营方案
- 【瑞幸咖啡财务分析报告(附财务报表)5300字(论文)】
- 过敏性鼻炎-疾病研究白皮书
- 乌头碱中毒急诊科培训课件-
- 三轴水泥搅拌桩施工质量措施
- 贵州茅台2023审计报告
- 幼儿园学前教育五以内的数字比大小练习题
- 高速铁路沉降观测与评估
- IT项目周报模板
- 地脉动测试原理及应用
评论
0/150
提交评论