二叉树的建立和遍历报告
班级:09级计科(1)班 姓名:林有龙 学号:22号
数据结构程序设计报告(二)
一、设计题目:
二叉树的建立和遍历
二、问题描述:
建立二叉树并对二叉树进行先序、中序、后序遍历,输入任意二叉树就输出其先序、中序、后序遍历。
三、结构设计:
四、算法分析
1、数据结构的定义
二叉树是另一种树型结构,它的特点是每个结点至多只有两棵子树,并且二叉树有左右之分,其次序不能任意颠倒。二叉树的存储结构分为顺序存储和链式存储结构,本次我们主要应用二叉树的二叉链表的方式存储方式,实验中首先必须对二叉树的数据结构进行定义,即定义一个二叉链表,其中其数据成员包括节点的数据、左子树的指针、右子树的指针。
2、二叉树的建立
在实验开始前我们要建立一个以先序形式的二叉树,先序的二叉树就是先访问根结点,然后访问左子树,最后访问右子树的遍历。
3、二叉树的遍历
二叉树的遍历分为先序、中序、后序,需先取遍历的节点的数据存入队列中,然后输出。
4、程序中要的函数的介绍
(1)二叉树的类型定义
typedef char TElemType;
typedef struct BiTNode
{ TElemType data;
struct BiTNode *lchild,*rchild;
} BiTNode, *BiTree;
(2)定义链式队列类型
typedef struct QNode
{ ElemType data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct
{ QueuePtr front;
QueuePtr rear;
} LinkQueue;
(3)初始化链式队列的函数
void InitQueue(LinkQueue *Q)
(4)销毁链式队列、判断空队列
void DestroyQueue(LinkQueue *Q)
int QueueEmpty(LinkQueue Q)
(5)主函数
main()
{ BiTree T; int n=0;
printf("请输入树的值:"); CreateBiTree(&T);
printf("\n先序遍历为:"); PreOrderTraverse(T);
printf("\n中序遍历为:"); InOrderTraverse(T);
printf("\n后序遍历为:"); PostOrderTraverse(T);
printf("\n层次遍历为:"); LevelOrderTraverse(T);
printf("\n节点数为%d\n",BiTreeDepth(T));
}
5、实验代码
#include "stdio.h"
#include "stdlib.h"
typedef char TElemType;
typedef struct BiTNode
{ TElemType data;
struct BiTNode *lchild,*rchild;
} BiTNode, *BiTree;
typedef BiTree ElemType;
typedef struct QNode
{ ElemType data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct
{ QueuePtr front;
QueuePtr rear;
} LinkQueue;
void InitQueue(LinkQueue *Q)
{ Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
if (!(Q->front)) exit(0);
Q->front->next=NULL; }
void DestroyQueue(LinkQueue *Q)
{ while (Q->front)
{ Q->rear=Q->front->next;
free(Q->front);
Q->front=Q->rear; }
}
int QueueEmpty(LinkQueue Q)
{ if (Q.front==Q.rear)
return 1;
else
return 0; }
void EnQueue(LinkQueue *Q, ElemType e)
{ QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if (!p) exit(0);
p->data=e; p->next=NULL;
Q->rear->next=p;
Q->rear=p; }
void DeQueue(LinkQueue *Q, ElemType *e)
{ QueuePtr p;
if (Q->front!=Q->rear)
{ p=Q->front->next;
*e=p->data;
Q->front->next=p->next;
if (Q->rear==p) Q->rear=Q->front;
free(p); }
}
void CreateBiTree(BiTree *T)
{ char ch;
scanf("%c",&ch);
if (ch==' ')
*T=NULL;
else
{ *T=(BiTree)malloc(sizeof(BiTNode));
(*T)->data=ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild); }
}
void PreOrderTraverse(BiTree T)
{ if (T)
{ printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild); }
}
void InOrderTraverse(BiTree T)
{ if (T)
{InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild); }
}
void PostOrderTraverse(BiTree T)
{ if (T)
{PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c",T->data); }
}
void LevelOrderTraverse(BiTree T)
{ LinkQueue Q; BiTree p;
InitQueue(&Q);
if (T) EnQueue(&Q, T);
while (!QueueEmpty(Q))
{ DeQueue(&Q, &p);
printf("%c",p->data);
if (p->lchild) EnQueue(&Q, p->lchild);
if (p->rchild) EnQueue(&Q, p->rchild); }
DestroyQueue(&Q);
}
int BiTreeDepth(BiTree T)
{ int h1,h2;
if (T==NULL)
return 0;
else
{ h1=BiTreeDepth(T->lchild);
h2=BiTreeDepth(T->rchild);
if (h1>h2)
return h1+1;
else
return h2+1; }
}
main()
{ BiTree T; int n=0;
printf("请输入树的值:"); CreateBiTree(&T);
printf("\n先序遍历为:"); PreOrderTraverse(T);
printf("\n中序遍历为:"); InOrderTraverse(T);
printf("\n后序遍历为:"); PostOrderTraverse(T);
printf("\n层次遍历为:"); LevelOrderTraverse(T);
printf("\n节点数为%d\n",BiTreeDepth(T));
}
6、程序运行结果
五、实验总结
通过本次实验,加深了对建立二叉树、二叉树遍历的理解,遍历形式有先序遍历、中序遍历、后序遍历、层次遍历、还有深度的求解等,在本次实验中也遇到了很大的问题,首先对二叉数树的建立和怎样让二叉树进入队列中的理解是个难点,还有就是在对先序、中序、后序遍历的函数的理解上也存在相当大的问题,但是在同学和网上搜资料后都一一的解决,总体来说这次实验很成功。
…… 此处隐藏:1636字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [政务民生]2013年公共基础知识热点问题(七)
- [政务民生]检验检测机构资质认定评审准则及释义20
- [政务民生]关于印发重庆市房屋建筑和市政基础设施
- [政务民生]1、隧道洞身开挖支护施工技术交底书
- [政务民生]2015年山东省17地市中考语文试题分类汇
- [政务民生]2-高级会计师资格考试和评审流程图
- [政务民生]2018版中国清分机行业发展分析及前景策
- [政务民生]新课改高中政治探究
- [政务民生]2018-2024年中国新型组合房屋行业投资
- [政务民生]2015年上海市春季高考数学模拟试卷五
- [政务民生]灌砂法及环刀法测压实度(带计算过程)
- [政务民生]运筹学实验2求解非线性规划
- [政务民生]劝学、逍遥游默写(教师卷)
- [政务民生]《运筹学》 - 期末考试 - 试卷A - 答案
- [政务民生]八年级英语下册 Module 6 Hobbies测试
- [政务民生]2019年宪法知识竞赛试题库100题(含答
- [政务民生]自动化英文文献翻译
- [政务民生]公文格式实施细则
- [政务民生]高一地理上册课堂跟踪练习题6
- [政务民生]会计继续教育习题及答案
- 第三章 无约束最优化方法
- 泛读教程第三册答案
- 魏晋南北朝文学
- 幂的运算复习题
- 城市环境问题的成因与治理策略_以社会
- 钢结构行业产业链及竞争分析研究
- 新型热塑性弹性体增韧聚丙烯的研究
- 中国旅游地理B卷试题及答案
- (苏教版)五年级数学上册第三单元测试卷
- 不稳定性心绞痛诊断与治疗
- 俞氏国际后勤职能部门绩效考核办法
- GB7258-2017新标准考试题含答案
- 小学生汉字听写比赛活动方案
- 1.3《平抛运动》学案 教科版必修2
- 2011香港特别行政区公务员考试复习资料
- 考虑水力条件变化的城市给水管网可靠性
- 表面活性剂在油田开发和生产中的应用
- ITT内部培训资料-FI端吸泵的介绍
- 文明守纪,从我做起学生发言稿
- 初中读《聊斋志异》心得体会800字范文




