按给定的先序序列来建_第1页
按给定的先序序列来建_第2页
按给定的先序序列来建_第3页
免费预览已结束,剩余6页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、按给定的先序序列来建立二叉 树课程题目 : 按给定的先序序列来建立二叉树 班级:10计算机 2 班姓名:熊芸芸 学号:10070518完成日期: 12月 2日星期五一、需求分析1、题目要求1.1 存储结构 : 以二叉链表作为二叉树的存储 结构1.2 二叉树的创建: 以给定的先序序列来创建二 叉树1.3 输出二叉树 : 以中序和后序序列输出二叉 树的结点2、测试数据:A B $ D G $ $ $ C E $ H $ $ F $ $( $表示空格符号)二、概要设计ADT BinaryTree 数据对象 D:D 是具有相同特性的数据元素的 集合。 数据关系:R1 = |ai-i ,ai D, i=

2、2,.,n 数据关系R :若D为空集,则称为空树;否则:(1)在D中存在唯一的称为根 的数据元素 root,(2) 当 n1 时,其余结点可分 为m (m0)个互不相交的有限集T1, T2,Tm, 其中每一个子集本身又是一棵树 , 称为根 root 的子树。基本操作:InitStack(SqStack &s) / 初始化栈StackElemty(SqStack &s)/判断栈是否为空Push(SqStack&s,BiTreee) /将元素e 进栈Pop(SqStack&s,BiTree&e) /出栈,栈顶元素返回给 eCreateBiTree(BiTree &t) /用先序建立一个二叉树,空格

3、表示空树InOrderTraverse(BiTree t,Status(* Visit)(TElemType e)/ 用非递归方式实现中 序遍历,对每个元素调用函数 visitPostorderTraverse(BiTree t) / 用 递归方式实现后序遍历 ADT BinaryTree三、详细设计 #include #include typedef int Status;typedef char TElemType; #define OK 1#define ERROR 0#define OVERFLOW -2 #define STACK_INIT_SIZE 50 #define STACK

4、INCREMENT 10 typedef struct BiTNode / 树二叉链表的存储结构TElemType data;struct BiTNode *lchlid,*rchlid; BiTNode,*BiTree; typedef struct / 栈的存储结构BiTree *base;BiTree *top;int stacksize; SqStack; Status InitStack(SqStack &s) / 初始化栈s.base=(BiTree *)malloc(STACK_INIT_SIZE * sizeof(BiTree);if(!s.base) exit(OVERFLO

5、W); s.top=s.base;s.stacksize=STACK_INIT_SIZE;return OK;Status StackElemty(SqStack &s)/ 判断栈是否为空if(s.base!=s.top)return ERROR;return OK;Status Push(SqStack &s,BiTree e)/ 将元素 e 进栈if(s.top-s.base=s.stacksize) / 追加分配s.base=(BiTree*)realloc(s.base,(s.stacksize+STACKINCREM ENT)*sizeof(BiTree);if(!s.base) e

6、xit(OVERFLOW);s.top=s.base+s.stacksize; s.stacksize+=STACKINCREMENT;*s.top+=e;return OK;Status Pop(SqStack &s,BiTree &e)/ 出栈,栈顶元素返回给 eif(s.top=s.base) return ERROR;e=*-s.top;return OK;Status CreateBiTree(BiTree &t)/ 用先序建立一个二叉树,空格表示空树TElemType ch;scanf(%c,&ch);if(ch= ) t=NULL;elseif(!(t=(BiTNode*)mal

7、loc(sizeof(BiTNode)exit(OVERFLOW);t-data=ch; / 生成根结点CreateBiTree(t-lchlid); /构造左子树CreateBiTree(t-rchlid); /构造右子树return OK;Status Visit(TElemType e)/ 访问函数printf(%c,e);return OK;Status InOrderTraverse(BiTree t,Status(* Visit)(TElemType e)/ 用非递归方式实现中序遍历,对每个元素调 用函数 visitSqStack s;InitStack(s); / 建立一个栈存储

8、二叉树的 结点BiTree p=t;while(p|!StackElemty(s)if(p)/ 根指针进栈,遍历左子树Push(s,p);p=p-lchlid;else/ 根指针退栈,访问根结点,遍历右子树 Pop(s,p);if(!Visit(p-data) return ERROR; p=p-rchlid;printf(n);return OK;Status PostorderTraverse(BiTree t)/ 用递归方式实现后序遍历 if(t)PostorderTraverse(t-lchlid); / 历左子树PostorderTraverse(t-rchlid); / 历右子树p

9、rintf(%c,t-data); / 访问结点 return OK;void main()BiTree t;printf( 请输入一串字符 :n);CreateBiTree(t);printf( 中序遍历结果为 :n);InOrderTraverse(t,Visit);printf( 后序遍历结果为 :n);PostorderTraverse(t);printf(n);四、调试分析1 、调用基本函数时要注意函数参数类型的变 化,如此程序中 Pop 和 Push2 、运行程序时要正确输入,才能有结果3 、 define 一个常量时,后面不用加分号4 、关于后序遍历, 用非递归的方式编写时出 现错误,改写成递归调用了5、要注意一些细节,比如分号,引号、还有 书写问题6、编程时一定要耐心, 程序不可能一次编写 成功,需要经过不断调试才能发现并改正错误In itStack( )0(1)StackElemty( )0(1)Push( )0(1)Pop( )0(1)CreateBiTree( )0(n)In OrderTraverse( ) O( n) PostorderTraverse( ) O( n)五、测试

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论