二叉树的建立及遍历_第1页
二叉树的建立及遍历_第2页
二叉树的建立及遍历_第3页
二叉树的建立及遍历_第4页
全文预览已结束

下载本文档

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

文档简介

二叉树的建立及遍历实验目的:掌握树形结构的特点,二叉树的存储方式以及相应操作。实验内容:任务1:按先序遍历序列建立二叉树的二叉链表,已知先序序列为:ABCFFDEFGFFFFFFO(F表示空格)。并写一个函数treenodes()统计该二叉树的节点个数。如果有可能,写一个输出函数treeprint()用树形结构打印出该二叉树。任务2:编写出按照层次遍历的思想对树的左孩子右兄弟表示方法的存储结构进行逐层遍历的算法,并给出测试程序及运行结果。任务3:编写出在利用四个数组表示一个二叉树的存储结构的情况下,根据给定序号找出所有祖先节点的算法,设计出先序、中序及后序遍历的递归算法并根据给定的数据给出测试结果。[说明]以上任务中选做2个,计算机各专业及电控学院学生必须选择任务2作为任务之一。其他理工科各专业学生任意选择2个,文科学生选任务1或任务3之一。程序代码:#include"stdio.h"#include"stdlib.h"#include"malloc.h"typedefcharTElemType; 〃定义数据的类型typedefstructBiTNode〃二叉树的结点{TElemTypedata;structBiTNode*lchild,*rchild;}BiTNode;typedefstructQNode〃队列{BiTNodedata;structQNode*next;}Queue;typedefstruct〃队列的头指针和尾指针{Queue*front;Queue*rear;}LinkQueue;intJT=0;BiTNode*CreateBiTree()〃先序建立二叉树{TElemTypech;BiTNode*T;scanf("%c",&ch);if(ch=='')T=NULL;elseif(!(T=(BiTNode*)malloc(sizeof(BiTNode))))exit(0);〃内存分配失败,退出T->data=ch;JT++;T->lchild=CreateBiTree();/建立左子树T->rchild=CreateBiTree();/建立右子树}returnT;〃建立成功返回二叉树}intInitQueue(LinkQueue*Q)//初始化队列{Q->front=Q->rear=(Queue*)malloc(sizeof(Queue));if(!Q->front)exit(0); 〃内存分配失败退出Q->front->next=NULL;return1; 〃初始化成功返回1}intEnQueue(LinkQueue*Q,BiTNodee)〃向队列中插入元素{Queue*p;p=(Queue*)malloc(sizeof(Queue));if(!p)exit(0);p->data=e;p->next=NULL;Q->rear->next=p;Q->rear=p;return1; 〃插入成功返回1}intDeQueue(LinkQueue*Q,BiTNode*e)〃出队{Queue*p;if(Q->front==Q->rear) 〃队列为空return0;p=Q->front->next;*e=p->data;Q->front->next=p->next;if(Q->rear==p)Q->rear=Q->front;free(p);return1;〃出队成功返回1intEmptyQueue(LinkQueue*Q) //判断队列是否为空队列if(Q->rear==Q->front)〃为空返回1return1;elsereturn0;voidLevelTraverse(BiTNode*T) 〃队列的层次遍历{LinkQueueQ;BiTNode*p;InitQueue(&Q);EnQueue(&Q,*T);P=T;while(!EmptyQueue(&Q)){DeQueue(&Q,p);printf("%c",p->data);if(p->lchild)EnQueue(&Q,*p->lchild);if(p->rchild)EnQueue(&Q,*p->rchild);voidPreOrderTraverse(BiTNode*btn) 〃递归先序遍历{if(btn!=NULL){printf("%c",btn->data);PreOrderTraverse(btn->lchild);PreOrderTraverse(btn->rchild);}}voidInOrderTraverse(BiTNode*btn)〃递归中序遍历{if(btn!=NULL){InOrderTraverse(btn->lchild);printf("%c",btn->data);InOrderTraverse(btn->rchild);voidPostOrderTraverse(BiTNode*btn)〃递归后序遍历{if(btn!=NULL){PostOrderTraverse(btn->lchild);PostOrderTraverse(btn->rchild);printf("%c",btn->data);}}main(){BiTNode*btn;printf("\n输入二叉树空节点输"”:\n");btn=CreateBiTree();printf("\n递归先序遍历二叉树的结果:\n");PreOrderTraverse(btn); 〃递归先序遍历建立的二叉树printf("\n递归中序遍历二叉树的结果:\n");InOrderTraverse(btn);printf("\n递归后序遍历二叉树的结果:\n");PostOrderTraverse(btn);printf("\n二叉树的结点数为:%d\n"JT); 〃二叉树结点的数目printf("\n层次遍历二叉树的结果:\n");LevelTraverse(btn);printf("\n");}结果:可"C:\u5er5\Admini5trator\De5kto件夷、二s■树的递归逼历.非递归遍I五和层次遍I五I口II回IIk^I腌入二叉树空节点输“”:abdehjcfigk归先序遍历二

温馨提示

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

评论

0/150

提交评论