首页 二叉树创建非递归、递归前中后序层次遍历

二叉树创建非递归、递归前中后序层次遍历

举报
开通vip

二叉树创建非递归、递归前中后序层次遍历二叉树创建非递归、递归前中后序层次遍历 姓名:王晓彬 学号:1301100211 班级:信计1002 时间:2012.04.30 1 实验四 二叉树的创建与遍历 实验目的: 通过上机实验进一步掌握栈、队列、二叉树的存储结构及基本操作的实现方法。 实验内容与要求: 基于二叉链表存储结构实现二叉树的基本运算,要求: ?能建立非空二叉树; ?实现二叉树的先、中、后序递归遍历算法; ?实现二叉树的非递归的先(或中、或后)序遍历算法及层序遍历算法; ?记录运行结果并对递归算法和非递归算法的效率加以分...

二叉树创建非递归、递归前中后序层次遍历
二叉树创建非递归、递归前中后序层次遍历 姓名:王晓彬 学号:1301100211 班级:信计1002 时间:2012.04.30 1 实验四 二叉树的创建与遍历 实验目的: 通过上机实验进一步掌握栈、队列、二叉树的存储结构及基本操作的实现方法。 实验内容与要求: 基于二叉链表存储结构实现二叉树的基本运算,要求: ?能建立非空二叉树; ?实现二叉树的先、中、后序递归遍历算法; ?实现二叉树的非递归的先(或中、或后)序遍历算法及层序遍历算法; ?记录运行结果并对递归算法和非递归算法的效率加以分析。 程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 : 注释: //创建者:王晓彬 班级:信计1002 // //学号:1301100211 //创建时间:2012.04.30 //最后修改时间:2012.05.05 程序设计: #include #include typedef int datatype; typedef struct node { datatype data; struct node *lchild,*rchild; }bitree,*bitrees; typedef struct queuenode //定义队列结点结构 { bitrees ch; struct queuenode *next; }queuenode,*queueptr; typedef struct //定义队列指针 { queueptr front; queueptr rear; }linkqueue; struct node* bulitbitree() //前序法创建二叉树 { bitree *T; 2 int a; scanf("%d",&a); if(a==0) T=NULL; else { T=(bitree*)malloc(sizeof(bitree)); T->data=a; T->lchild=bulitbitree(); T->rchild=bulitbitree(); } return (T); } void PreOrderTraverse(bitree *T) //递归前序 { if(T) { printf("%d\t",T->data); PreOrderTraverse(T->lchild); PreOrderTraverse(T->rchild); } } void InOrderTraverse(bitree *T) //递归中序 { if(T) { InOrderTraverse(T->lchild); printf("%d\t",T->data); InOrderTraverse(T->rchild); } } void PostOrderTraverse(bitree *T) //递归后序 { if(T) { PostOrderTraverse(T->lchild); PostOrderTraverse(T->rchild); printf("%d\t",T->data); } } void InOrder(bitree* T) //非递归前序 { bitree *stack[99],*p; int top=-1; 3 if(T!=NULL) { top++; stack[top]=T; //根节点入栈 while(top>-1) { p=stack[top]; //出栈 top--; printf("%d\t",p->data); if(p->rchild!=NULL) { top++; stack[top]=p->rchild; } if(p->lchild!=NULL) { top++; stack[top]=p->lchild; } } } } void initqueue(linkqueue &q) //初始化一个带头结点的队列 { q.front=q.rear=(queueptr)malloc(sizeof(queuenode)); q.front->next=NULL; } void enqueue(linkqueue &q,bitrees p) //入队列 { queueptr s; int first=1; s=(queueptr)malloc(sizeof(queuenode)); s->ch=p; s->next=NULL; q.rear->next=s; q.rear=s; } void dequeue(linkqueue &q,bitrees &p) //出队列 { int data; queueptr s; s=q.front->next; p=s->ch; 4 data=p->data; q.front->next=s->next; if(q.rear==s) q.rear=q.front; free(s); printf("%d\t",data); } int queueempty(linkqueue q) //判断队列是否为空 { if(q.front->next==NULL) return 1; return 0; } void traverse(bitrees bt) //按层次遍历树中结点 { linkqueue q; bitrees p; initqueue(q); p=bt; enqueue(q,p); while(queueempty(q)!=1) { dequeue(q,p); if(p->lchild!=NULL) enqueue(q,p->lchild); if(p->rchild!=NULL) enqueue(q,p->rchild); } } void main() //主程序 { bitree *T; printf("输入二叉树(以0为空节点标志):\n"); T=bulitbitree(); printf("递归法输出:\n"); printf("\t先序遍历为:\n"); PreOrderTraverse(T);printf("\n"); printf("\t中序遍历为:\n"); InOrderTraverse(T);printf("\n"); printf("\t后序遍历为:\n"); PostOrderTraverse(T);printf("\n"); printf("非递归先序遍历为:\n"); InOrder(T);printf("\n"); printf("层次遍历为:\n"); 5 traverse(T);printf("\n"); } 运行结果: 效率分析: 1.递归算法的优点 (1)问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 的数学模型或算法设计方法本身就是递归的,采用递归算法来描述它们非常自然; (2)描述直观,结构清晰、简洁;正确性证明比非递归算法容易。 2.递归算法的不足 (1)算法的执行时间与空间开销往往比非递归算法要大,当问题规模较大时尤为明显; (2)对算法进行优化比较困难; (3)分析跟踪算法的执行过程比较麻烦; (4)描述算法的语言不具有递归功能时,算法无法描述。 6
本文档为【二叉树创建非递归、递归前中后序层次遍历】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_574951
暂无简介~
格式:doc
大小:36KB
软件:Word
页数:8
分类:工学
上传时间:2017-09-26
浏览量:23