实验报告二叉树
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
p->data);PreOrder(p->lchild);PreOrder(p->rchild);}}void InOrder(BiTree p){ /* 中序遍历二叉树*/ if( p!= NULL ) {InOrder( p->lchild ) ;printf("%c", p->data);InOrder( p->rchild) ; } }void PostOrder(BiTree p){ /* 后序遍历二叉树*/ if ( p!= NULL ) {PostOrder( p->lchild ) ;PostOrder( p->rchild) ;printf("%c", p->data); } }void Preorder_n(BiTree p){ /*先序遍历的非递归算法*/ BiTree stack[MAX],q; int top=0,i;for(i=0;i while(q!=NULL){printf("%c",q->data);if(q->rchild!=NULL) stack[top++]=q->rchild;if(q->lchild!=NULL) q=q->lchild;elseif(top>0) q=stack[--top]; else q=NULL; } }void release(BiTree t){ /*释放二叉树空间*/ if(t!=NULL){release(t->lchild); release(t->rchild);
递归遍历右子树输出根结点数data}void postOrder1 (struct btnode *bt){概念栈,结点参数p,prebt入栈While(栈或p是不是为空){提取栈顶元素值if判定p是不是为空或是pre的根结点输出根结点数data栈顶元素出栈栈顶元素p赋给pre记录else if右结点非空将右结点压栈if左结点将左结点压栈}}void main(){struct btnode *root=NULL;root=createbt(root);preOrder(root); midOrder(root); postOrder(root);preOrder1(root); midOrder1(root); postOrder1(root);
实验报告二叉树
篇一:二叉树实验报告山东工商学院《数据结构》实验指导及报告书XX / XX 学年姓名:学号: 班级: 指导教师:Xx学院XX年11月25日第 一 学期实验三 二叉树一、实验目的一、把握二叉树的大体特性二、把握二叉树的先序、中序、后序的递归遍历算法 3、明白得二叉树的先序、中序、后序的非递归遍历算法4、通过求二叉树的深度、叶子结点数和层序遍历等算法,明白得二叉树的大体特性二、实验预习说明以下概念一、二叉树:是另一种树型结构,它的特点是每一个结点最多只有两棵子树,而且二叉树有左右之分,第二序不能任意倒置。 二、递归遍历:一、 非递归遍历:
操作结果:递归后序遍历void postOrder1 (struct btnode *bt)初始条件:二叉树存在操作结果:非递归后序遍历void main() 主函数(2)void main() 主函数{*createbtpreOrderpreOrder1midOrdermidOrder1postOrderpostOrder1}4.详细设计struct btnode{char data;struct btnode *Lchild;struct btnode *Rchild;};struct btnode *createbt(struct btnode *bt ){
struct btnode *Lchild;struct btnode *Rchild;};struct btnode *createbt(struct btnode *bt )//先序成立二叉树{char c;c=getchar();if(c==' ')//若是输入为空,那么子树为空{bt=NULL;}else{if(!(bt=(struct btnode *)malloc(sizeof(struct btnode))))//查验bt空间分派是不是成功 printf("error!");bt->data=c;bt->Lchild=createbt(bt->Lchild);//递归成立左子树bt->Rchild=createbt(bt->Rchild); //递归成立右子树}return(bt);
访问右子树}void midOrder(struct btnode *bt){判定树是不是为空递归遍历左子树输出根结点数data递归遍历右子树}void midOrder1(struct btnode *bt){概念栈,结点参数pWhile(栈或p是不是为空){While(p!=null){将根结点压栈遍历左子树}提取栈顶元素值输出根结点数data栈顶元素出栈访问右子树}void postOrder(struct btnode *bt){判定树是不是为空递归遍历左子树
输入结点数据c检查存储空间将c赋给结点参数p递归成立左子树递归成立右子树}void preOrder(struct btnode *bt){判定树是不是为空输出根结点数data递归遍历左子树递归遍历右子树}void preOrder1(struct btnode *bt){概念栈,结点参数pWhile(栈或p是不是为空){While(p!=null){输出根结点数data将根结点压栈遍历左子树}提取栈顶元素值栈顶元素出栈
}void preOrder(struct btnode *bt)//递归先序遍历 {if(bt!=NULL){printf("%c",bt->data);preOrder(bt->Lchild);preOrder(bt->Rchild);}}void preOrder1(struct btnode *bt)//非递归先序遍历 {int i=0;struct btnode *p;stack s;概念栈p=bt;while(p!=NULL||!s.empty()){while(p!=NULL){printf((转载自:xiaocaOfaNWen 小草 范 文 网:实验报告二叉树)"%c",p->data);s.push(p);//将根结点压栈
p=p->Lchild;//遍历左子树}if(!s.empty()){p=s.top();//提取栈顶元素值 s.pop();//栈顶元素出栈p=p->Rchild;//访问右子树}}}void midOrder(struct btnode *bt)//递归中序遍历 {if(bt!=NULL){midOrder(bt->Lchild);printf("%c",bt->data);midOrder(bt->Rchild);}篇三:数据结构C二叉树实验报告北 京 林 业 大 学12学年—13学年第1学期数据结构实验报告书专 业:自动化 班 级:11-1姓 名: 宁友菊学 号: 111044120 实验地址: B2机房任课教师: 孟伟实验题目:二叉树的大体操作实验环境: Visual C++实验目的:
free(t); } }int main(){BiTree t=NULL; int e,m,g;t=createBiTree(t);printf("\n\nPreOrder the tree is:"); PreOrder(t);printf("\n\nInOrder the tree is:"); InOrder(t);printf("\n\nPostOrder the tree is:"); PostOrder(t);printf("\n\n先序遍历序列(非递归):");Preorder_n(t);printf("\n\n输出结点总数:"); e=PreOrder_num(t); printf("%d",e);printf("\n\n输出树的深度:"); m=BTNodeDepth(t); printf("%d\n",m);printf("\n\n输出树叶子总数:"); g=LeafNodes(t); printf("%d\n",g); release(t); return 0; }?运行程序输入:ABC##DE#G##F### 运行结果:画出该二叉树的形态:
4、层序遍历:三、实验内容和要求一、阅读并运行下面程序,依照输入写出运行结果,并画出二叉树的形态。 #include #include#define MAX 20typedef struct BTNode{ /*节点结构声明*/char data ;/*节点数据*/ struct BTNode *lchild;struct BTNode *rchild ; /*指针*/ }*BiTree;BiTree createBiTree(BiTree t){ /* 先序遍历创建二叉树*/ char s;printf("\nplease input data:(exit for #)"); s=getche();if(s=='#'){t=NULL; return t;}t=(BiTree)malloc(sizeof(struct BTNode));if(t==NULL){printf("Memory alloc failure!"); exit(0);} t->data=s;t->lchild=createBiTree(t->lchild); /*递归成立左子树*/ t->rchild=createBiTree(t->rchild); /*递归成立右子树*/ return t; }void PreOrder(BiTree p){ /* 先序遍历二叉树*/ if ( p!= NULL ) {printf("%c",
二、在上题中补充求二叉树中求结点总数算法(提示:可在某种遍历进程中统计遍历的结点数),并在主函数中补充相应的挪用验证正确性。算法代码:int PreOrder_num(BiTree p){ int j=0;BiTree stack[MAX],q; int top=0,i;for(i=0;i篇二:二叉树遍历实验报告1.实验题目二叉树的成立与遍历[问题描述]成立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果。2.需求分析(1)输入的形式和输入值的范围:以字符形式按先序遍历输入(2)输出的形式:依次按递归先序、中序、后序遍历,非递归先序、中序、后序遍历结果输出(3) 程序所能达到的功能:从键盘同意输入(先序)进行遍历(先序、中序、后序),将遍历结果打印输。(4) 测试数据:ABCффDEфGффFффф(其中ф表示空格字符)那么输出结果为 先序:ABCDEGF中序:CBEGDFA后序:CGBFDBA3.概要设计
(1)struct btnode{char data; 数据struct btnode *Lchild;左子数指针struct btnode *Rchild; 右子数指针};struct btnode *createbt(struct btnode *bt )初始条件:空二叉树存在操作结果:先序成立二叉树void preOrder(struct btnode *bt)初始条件:二叉树存在递归先序遍历二叉树void preOrder1(struct btnode *bt)初始条件:二叉树存在操作结果:非递归先序遍历void midOrder(struct btnode *bt)初始条件:二叉树存在操作结果:递归中序遍历void midOrder1(struct btnode *bt)初始条件:二叉树存在操作结果:非递归中序遍历void postOrder(struct btnode *bt)初始条件:二叉树存在
}5.调试分析(1)先序成立二叉树时,虽用到递归建左右子树,但没有把他们赋值给根节点的左右指针,造成二叉树脱节。(2)非递归后序遍历时,未考虑到所有条件,只考虑节点的左右结点是不是为空,而未考虑结点是不是是前一个遍历结点的根节点且不为空。(3)用栈实现非递归遍历。6.用户利用说明运行环境为vc6.0程序执行后在命令窗口中输入测试数据然后enter7.测试结果八、附录#include#includeng namespace std;struct btnode{char data;
递归遍历右子树输出根结点数data}void postOrder1 (struct btnode *bt){概念栈,结点参数p,prebt入栈While(栈或p是不是为空){提取栈顶元素值if判定p是不是为空或是pre的根结点输出根结点数data栈顶元素出栈栈顶元素p赋给pre记录else if右结点非空将右结点压栈if左结点将左结点压栈}}void main(){struct btnode *root=NULL;root=createbt(root);preOrder(root); midOrder(root); postOrder(root);preOrder1(root); midOrder1(root); postOrder1(root);
实验报告二叉树
篇一:二叉树实验报告山东工商学院《数据结构》实验指导及报告书XX / XX 学年姓名:学号: 班级: 指导教师:Xx学院XX年11月25日第 一 学期实验三 二叉树一、实验目的一、把握二叉树的大体特性二、把握二叉树的先序、中序、后序的递归遍历算法 3、明白得二叉树的先序、中序、后序的非递归遍历算法4、通过求二叉树的深度、叶子结点数和层序遍历等算法,明白得二叉树的大体特性二、实验预习说明以下概念一、二叉树:是另一种树型结构,它的特点是每一个结点最多只有两棵子树,而且二叉树有左右之分,第二序不能任意倒置。 二、递归遍历:一、 非递归遍历:
操作结果:递归后序遍历void postOrder1 (struct btnode *bt)初始条件:二叉树存在操作结果:非递归后序遍历void main() 主函数(2)void main() 主函数{*createbtpreOrderpreOrder1midOrdermidOrder1postOrderpostOrder1}4.详细设计struct btnode{char data;struct btnode *Lchild;struct btnode *Rchild;};struct btnode *createbt(struct btnode *bt ){
struct btnode *Lchild;struct btnode *Rchild;};struct btnode *createbt(struct btnode *bt )//先序成立二叉树{char c;c=getchar();if(c==' ')//若是输入为空,那么子树为空{bt=NULL;}else{if(!(bt=(struct btnode *)malloc(sizeof(struct btnode))))//查验bt空间分派是不是成功 printf("error!");bt->data=c;bt->Lchild=createbt(bt->Lchild);//递归成立左子树bt->Rchild=createbt(bt->Rchild); //递归成立右子树}return(bt);
访问右子树}void midOrder(struct btnode *bt){判定树是不是为空递归遍历左子树输出根结点数data递归遍历右子树}void midOrder1(struct btnode *bt){概念栈,结点参数pWhile(栈或p是不是为空){While(p!=null){将根结点压栈遍历左子树}提取栈顶元素值输出根结点数data栈顶元素出栈访问右子树}void postOrder(struct btnode *bt){判定树是不是为空递归遍历左子树
输入结点数据c检查存储空间将c赋给结点参数p递归成立左子树递归成立右子树}void preOrder(struct btnode *bt){判定树是不是为空输出根结点数data递归遍历左子树递归遍历右子树}void preOrder1(struct btnode *bt){概念栈,结点参数pWhile(栈或p是不是为空){While(p!=null){输出根结点数data将根结点压栈遍历左子树}提取栈顶元素值栈顶元素出栈
}void preOrder(struct btnode *bt)//递归先序遍历 {if(bt!=NULL){printf("%c",bt->data);preOrder(bt->Lchild);preOrder(bt->Rchild);}}void preOrder1(struct btnode *bt)//非递归先序遍历 {int i=0;struct btnode *p;stack s;概念栈p=bt;while(p!=NULL||!s.empty()){while(p!=NULL){printf((转载自:xiaocaOfaNWen 小草 范 文 网:实验报告二叉树)"%c",p->data);s.push(p);//将根结点压栈
p=p->Lchild;//遍历左子树}if(!s.empty()){p=s.top();//提取栈顶元素值 s.pop();//栈顶元素出栈p=p->Rchild;//访问右子树}}}void midOrder(struct btnode *bt)//递归中序遍历 {if(bt!=NULL){midOrder(bt->Lchild);printf("%c",bt->data);midOrder(bt->Rchild);}篇三:数据结构C二叉树实验报告北 京 林 业 大 学12学年—13学年第1学期数据结构实验报告书专 业:自动化 班 级:11-1姓 名: 宁友菊学 号: 111044120 实验地址: B2机房任课教师: 孟伟实验题目:二叉树的大体操作实验环境: Visual C++实验目的:
free(t); } }int main(){BiTree t=NULL; int e,m,g;t=createBiTree(t);printf("\n\nPreOrder the tree is:"); PreOrder(t);printf("\n\nInOrder the tree is:"); InOrder(t);printf("\n\nPostOrder the tree is:"); PostOrder(t);printf("\n\n先序遍历序列(非递归):");Preorder_n(t);printf("\n\n输出结点总数:"); e=PreOrder_num(t); printf("%d",e);printf("\n\n输出树的深度:"); m=BTNodeDepth(t); printf("%d\n",m);printf("\n\n输出树叶子总数:"); g=LeafNodes(t); printf("%d\n",g); release(t); return 0; }?运行程序输入:ABC##DE#G##F### 运行结果:画出该二叉树的形态:
4、层序遍历:三、实验内容和要求一、阅读并运行下面程序,依照输入写出运行结果,并画出二叉树的形态。 #include #include#define MAX 20typedef struct BTNode{ /*节点结构声明*/char data ;/*节点数据*/ struct BTNode *lchild;struct BTNode *rchild ; /*指针*/ }*BiTree;BiTree createBiTree(BiTree t){ /* 先序遍历创建二叉树*/ char s;printf("\nplease input data:(exit for #)"); s=getche();if(s=='#'){t=NULL; return t;}t=(BiTree)malloc(sizeof(struct BTNode));if(t==NULL){printf("Memory alloc failure!"); exit(0);} t->data=s;t->lchild=createBiTree(t->lchild); /*递归成立左子树*/ t->rchild=createBiTree(t->rchild); /*递归成立右子树*/ return t; }void PreOrder(BiTree p){ /* 先序遍历二叉树*/ if ( p!= NULL ) {printf("%c",
二、在上题中补充求二叉树中求结点总数算法(提示:可在某种遍历进程中统计遍历的结点数),并在主函数中补充相应的挪用验证正确性。算法代码:int PreOrder_num(BiTree p){ int j=0;BiTree stack[MAX],q; int top=0,i;for(i=0;i篇二:二叉树遍历实验报告1.实验题目二叉树的成立与遍历[问题描述]成立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果。2.需求分析(1)输入的形式和输入值的范围:以字符形式按先序遍历输入(2)输出的形式:依次按递归先序、中序、后序遍历,非递归先序、中序、后序遍历结果输出(3) 程序所能达到的功能:从键盘同意输入(先序)进行遍历(先序、中序、后序),将遍历结果打印输。(4) 测试数据:ABCффDEфGффFффф(其中ф表示空格字符)那么输出结果为 先序:ABCDEGF中序:CBEGDFA后序:CGBFDBA3.概要设计
(1)struct btnode{char data; 数据struct btnode *Lchild;左子数指针struct btnode *Rchild; 右子数指针};struct btnode *createbt(struct btnode *bt )初始条件:空二叉树存在操作结果:先序成立二叉树void preOrder(struct btnode *bt)初始条件:二叉树存在递归先序遍历二叉树void preOrder1(struct btnode *bt)初始条件:二叉树存在操作结果:非递归先序遍历void midOrder(struct btnode *bt)初始条件:二叉树存在操作结果:递归中序遍历void midOrder1(struct btnode *bt)初始条件:二叉树存在操作结果:非递归中序遍历void postOrder(struct btnode *bt)初始条件:二叉树存在
}5.调试分析(1)先序成立二叉树时,虽用到递归建左右子树,但没有把他们赋值给根节点的左右指针,造成二叉树脱节。(2)非递归后序遍历时,未考虑到所有条件,只考虑节点的左右结点是不是为空,而未考虑结点是不是是前一个遍历结点的根节点且不为空。(3)用栈实现非递归遍历。6.用户利用说明运行环境为vc6.0程序执行后在命令窗口中输入测试数据然后enter7.测试结果八、附录#include#includeng namespace std;struct btnode{char data;