二叉树的遍历实验报告_第1页
二叉树的遍历实验报告_第2页
二叉树的遍历实验报告_第3页
二叉树的遍历实验报告_第4页
二叉树的遍历实验报告_第5页
全文预览已结束

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上二叉树的遍历实验报告一、需求分析在二叉树的应用中,常常要求在树中查找具有某种特征的结点,或者对树中全部结点逐一进行某种处理,这就是二叉树的遍历问题。对二叉树的数据结构进行定义,建立一棵二叉树,然后进行各种实验操作。二叉树是一个非线性结构,遍历时要先明确遍历的规则,先访问根结点还时先访问子树,然后先访问左子树还是先访问有右子树,这些要事先定好,因为采用不同的遍历规则会产生不同的结果。本次实验要实现先序、中序、后序三种遍历。基于二叉树的递归定义,以及遍历规则,本次实验也采用的是先序遍历的规则进行建树的以及用递归的方式进行二叉树的遍历。二、系统总框图 主程序建立二叉树输入二

2、叉树先序遍历中序遍历后序遍历LchilddataRchildDataLchildRchild结点结构二叉树结点三、各模块设计分析 (1)建立二叉树结构 建立二叉树时,要先明确是按哪一种遍历规则输入,该二叉树是按你所输入的遍历规则来建立的。本实验用的是先序遍历的规则进行建树。二叉树用链表存储来实现,因此要先定义一个二叉树链表存储结构。因此要先定义一个结构体。此结构体的每个结点都是由数据域data、左指针域Lchild、右指针域Rchild组成,两个指针域分别指向该结点的左、右孩子,若某结点没有左孩子或者右孩子时,对应的指针域就为空。最后,还需要一个链表的头指针指向根结点。要注意的是,第一步的时候

3、一定要先定义一个结束标志符号,例如空格键、等。当它遇到该标志时,就指向为空。建立左右子树时,仍然是调用create()函数,依此递归进行下去,直到遇到结束标志时停止操作。 (2)输入二叉树元素 输入二叉树时,是按上面所确定的遍历规则输入的。最后,用一个返回值来表示所需要的结果。 (3)先序遍历二叉树 当二叉树为非空时,执行以下三个操作:访问根结点、先序遍历左子树、先序遍历右子树。 (4)中序遍历二叉树 当二叉树为非空时,程序执行以下三个操作:访问根结点、先序遍历左子树、先序遍历右子树。 (5)后序遍历二叉树 当二叉树为非空时,程序执行以下三个操作:访问根结点、先序遍历左子树、先序遍历右子树。

4、(6)主程序 需列出各个函数,然后进行函数调用。四、各函数定义及说明 因为此二叉树是用链式存储结构存储的,所以定义一个结构体用以存储。 typedef struct BiTNode char data; struct BiTNode *Lchild; struct BiTNode *Rchild;BiTNode,*BiTree; (1)主函数main() 主程序要包括:定义的二叉树T、建树函数create()、先序遍历函数Preorder()、中序遍历函数Inorder()、后序遍历函数Postorder()。 (2)建树函数Create() 定义一个输入的数是字符型的,当ch为空时,T就为空

5、值,否则的话就分配空间给T,T就指向它的结点,然后左指针域指向左孩子,右指针指向右孩子,若还有,继续调用Create(),依次循环下去,直到ch遇到空时,结束。 最后要返回建立的二叉树T。 (3)先序遍历函数Preorder() 根据先序遍历规则,当T为非空时,先输出结点处的数据,指针指向左、右孩子,依次进行下去。 (4) 中序遍历函数Inorder() 根据中序遍历规则,当T为非空时,先左指针指向左孩子数据,然后输出结点处的数据,再右指针指向右孩子,依次进行下去。 (5)后序遍历函数Postorder() 根据后序遍历规则,当T为非空时,先右指针指向右孩子,然后左指针指向左孩子,最后输出结点

6、处的数据,依次进行下去。 五、使用说明 在Turbo C的环境下,先按Ctrl+F9运行程序,此时就是建立二叉树的过程,例如输入序列-+a *b -c d /e f 输入过程中不要加回车,因为回车也有对应的ASCII码,是要算字符的,输入完之后再按回车,用户界面上就能够看到结果了。 另外你必须会手动建立一棵二叉树,保证你输入的序列能构成一棵二叉树,否则你怎么输入,按最后按多少回车程序也不会结束! 六、源程序#include "stdio.h"#include "string.h"#include "alloc.h"#define NU

7、LL 0typedef struct BiTNode char data; struct BiTNode *Lchild; struct BiTNode *Rchild;BiTNode,*BiTree;BiTree Create() char ch; BiTree T; scanf("%c",&ch); if(ch=' ') T=NULL; else T=(BiTNode *)malloc(sizeof(BiTNode); T->data=ch; T->Lchild=Create(); T->Rchild=Create(); ret

8、urn T;void Preorder(BiTree T) if(T) printf("%c",T->data); Preorder(T->Lchild); Preorder(T->Rchild); void Inorder(BiTree T) if(T) Inorder(T->Lchild); printf("%c",T->data); Inorder(T->Rchild); void Postorder(BiTree T) if(T) Postorder(T->Lchild); Postorder(T->

9、;Rchild); printf("%c",T->data); main() BiTree T; clrscr(); printf("The elements is : "); T=Create(); printf("n"); printf("The Preorder's result is : "); Preorder(T); printf(" nn"); printf("The Inorder's result is : "); Inorder(T); printf("nn"); printf("The Postorder's result is : "); Postorder(T

温馨提示

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

评论

0/150

提交评论