二叉树遍历 实验报告

二叉树遍历  实验报告
二叉树遍历  实验报告

数据结构实验报告

报告题目:二叉树的基本操作

学生班级:

学生姓名:学号:

一.实验目的

1、基本要求:深刻理解二叉树性质和各种存储结构的特点及适用范围;掌

握用指针类型描述、访问和处理二叉树的运算;熟练掌握二叉树的遍历算法;。

2、较高要求: 在遍历算法的基础上设计二叉树更复杂操作算法;认识哈夫

曼树、哈夫曼编码的作用和意义;掌握树与森林的存储与便利。

二. 实验学时:

课内实验学时:3学时

课外实验学时:6学时

三.实验题目

1.以二叉链表为存储结构,实现二叉树的创建、遍历(实验类型:验证型)1)问题描述:在主程序中设计一个简单的菜单,分别调用相应的函数功能:1…建立树

2…前序遍历树

3…中序遍历树

4…后序遍历树

5…求二叉树的高度

6…求二叉树的叶子节点

7…非递归中序遍历树

0…结束

2)实验要求:在程序中定义下述函数,并实现要求的函数功能:

CreateBinTree(BinTree &T): 按从键盘输入的前序序列,创建树

Preorder(BinTree &T):前序遍历树(递归)

Inorder(BinTree &T):中序(递归)遍历树

Postorder(BinTree &T): 后序遍历树(递归)

PostTreeDepth(BinTree &T):树的高度

leaf(BinTree &T):树的叶子节点

InorderN(BinTree &T):中序(非递归)遍历树

3)数据结构

二叉链表存储数据类型定义

typedef struct node{

TElemType data;

struct node *lchild,*rchild;

}BinTNode;

元素类型:

int CreateBinTree(BinTree &T);

void Preorder(BinTree &T);

void Inorder(BinTree &T);

void Postorder(BinTree &T);

void InorderN(BinTree &T);

int PostTreeDepth(BinTree &T);

int leaf(BinTree &T);

2、编写算法实现二叉树的非递归中序遍历和求二叉树高度。1)问题描述:实现二叉树的非递归中序遍历和求二叉树高度

2)实验要求:以二叉链表作为存储结构

3) 实现过程:

1、实现非递归中序遍历代码:

void CBiTree::InorderN(BinTree &T)

{

BinTree stack[MAX],p;

int top=0;p=T;

do

{

while(p!=NULL)

{

stack[top]=p;;

top=top+1;

p=p->lchild;

};

if(top>0)

{

top=top-1;

p=stack[top];

printf("%3c",p->data );

p=p->rchild;

}

}

while(p!=NULL||top!=0);

}

2、求二叉树高度:

int CBiTree::PostTreeDepth(BinTree &T)

{

int l,r,max;

if(T!=NULL)

{

l=PostTreeDepth(T->lchild );

r=PostTreeDepth(T->rchild );

max=l>r?l:r;

return(max+1);

}

else return(0);

}

实验步骤:

1)新建一个基于Console Application的工程,工程名称BiTreeTest;

2)新建一个类CBiTree二叉树类。

3)在类CBiTree的头文件上方定义二叉链表存储数据类型结构体BiTNode。

4)在类CBiTree中定义函数CreateBinTree();Preorder();Inorder();

Postorder();PostTreeDepth();InorderN();

5)实现函数CreateBinTree();Preorder();Inorder();

Postorder();PostTreeDepth();InorderN();

6)在主函数中定义对象,通过对象调用函数,实现各个函数的操作。

运行结果:

数据结构——二叉树的操作(遍历及树形输出)

/*实验三:二叉树遍历操作验证*/ #include #include #include #include #include #include #include using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -2 int LeafNum;//叶子结点个数 //定义结构体 typedef struct BiTNode{ char data; //存放值 struct BiTNode *lchild,*rchild; //左右孩子 }BiTNode,*BiTree; //先序输入二叉树结点的值,空格表示空树 void createBiTree(BiTree &T) { char ch; //输入结点时用 scanf("%c",&ch); if(ch==' ') //若输入空格,该值为空,且没有左右孩子 { T=NULL; }else{ T=(BiTNode *)malloc(sizeof(BiTNode)); //分配结点空间 if(!T) //分配失败 { exit(OVERFLOW); } T->data=ch; //生成根结点 createBiTree(T->lchild); //构造左子树 createBiTree(T->rchild); //构造右子树 } } //递归方法先序遍历二叉树 void preOrderTraverse(BiTree T) {

if(T) //若非空 { if(T->data) { //输出 printf("%c",T->data); } preOrderTraverse(T->lchild); preOrderTraverse(T->rchild); } } //递归方法中序遍历二叉树 void inOrderTraverse(BiTree T) { if(T) //若非空 { preOrderTraverse(T->lchild); if(T->data) { //输出 printf("%c",T->data); } preOrderTraverse(T->rchild); } } //递归方法后序遍历二叉树 void postOrderTraverse(BiTree T) { if(T) //若非空 { preOrderTraverse(T->lchild); preOrderTraverse(T->rchild); if(T->data) { //输出 printf("%c",T->data); } } } //层序遍历二叉树 void LevelTraverse(BiTree T) { queue q;//建队 q.push(T);//根节点入队

二叉树实验报告

实验题目:实验九——二叉树实验 算法设计(3) 问题分析: 1、题目要求:编写算法交换二叉树中所有结点的左右子树 2、设计思路:首先定义一个二叉树的数据类型,使用先序遍历建立该二叉树,遍历二叉树,设计左右子树交换的函数,再次遍历交换之后的二叉树,与先前二叉树进行比较。遍历算法与交换算法使用递归设计更加简洁。 3、测试数据: A、输入:1 2 4 0 0 5 0 0 3 0 0 交换前中序遍历:4 2 5 1 3 交换后中序遍历:3 1 5 2 4 交换前:交换后: B、输入:3 7 11 0 0 18 17 0 0 19 0 0 6 13 0 0 16 0 0 交换前中序遍历:11 7 17 18 19 3 13 6 16 交换后中序遍历:16 6 13 3 19 18 17 7 11 概要设计: 1、为了实现上述功能:①构造一个空的二叉树;②应用先序遍历输入,建立二叉树;③中序遍历二叉树;④调用左右子树交换函数;⑤中序遍历交换过后的二叉树。 2、本程序包括4个函数: ①主函数main() ②先序遍历二叉树建立函数creat_bt() ③中序遍历二叉树函数inorder() ④左右子树交换函数 exchange()

各函数间关系如下: 详细设计: 1、结点类型 typedef struct binode //定义二叉树 { int data; //数据域 struct binode *lchild,*rchild; //左孩子、右孩子 }binode,*bitree; 2、各函数操作 ① 先序遍历建二叉树函数 bitree creat_bt() { 输入结点数据; 判断是否为0{ 若是,为空; 不是,递归;} 返回二叉树; } ② 左右子树交换函数 void exchange(bitree t) { 判断结点是否为空{ 否,交换左右子树; 递归;} } ③ 中序遍历函数 void inorder(bitree bt) { 判断是否为空{ 递归左子树; 输出; 递归右子树;} } main () creat_bt () inorder () exchange ()

二叉树的建立及遍历

数据结构实验五 课程数据结构实验名称二叉树的建立及遍历第页 专业班级学号 姓名 实验日期:年月日评分 一、实验目的 1.学会实现二叉树结点结构和对二叉树的基本操作。 2.掌握对二叉树每种操作的具体实现,学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法。 二、实验要求 1.认真阅读和掌握和本实验相关的教材内容。 2.编写完整程序完成下面的实验内容并上机运行。 3.整理并上交实验报告。 三、实验内容 1.编写程序任意输入二叉树的结点个数和结点值,构造一棵二叉树,采用三种递归遍历算法(前序、中序、后序)对这棵二叉树进行遍历并计算出二叉树的高度。 2 .编写程序生成下面所示的二叉树,并采用先序遍历的非递归算法对此二叉 树进行遍历。 四、实验步骤 (描述实验步骤及中间的结果或现象。在实验中做了什么事情,怎么做的,发生的现象和中间结果) 第一题 #include "stdafx.h" #include"iostream.h" #include"stdlib.h"

#include"stdio.h" #includelchild); int n=depth(T->rchild); ?return (m>n?m:n)+1; } } //先序,中序建树 structnode*create(char *pre,char *ord,int n) { ?struct node*T; intm; T=NULL; ?if(n<=0) ?{ ?returnNULL; } ?else ?{ ?m=0; ??T=new(struct node); T->data=*pre; ?T->lchild=T->rchild=NULL; ?while(ord[m]!=*pre) ?m++; T->lchild=create(pre+1,ord,m); ?T->rchild=create(pre+m+1,ord+m+1,n-m-1);

数据结构二叉树实验报告

实验三二叉树的遍历 一、实验目的 1、熟悉二叉树的结点类型和二叉树的基本操作。 2、掌握二叉树的前序、中序和后序遍历的算法。 3、加深对二叉树的理解,逐步培养解决实际问题的编程能力。 二、实验环境 运行C或VC++的微机。 三、实验内容 1、依次输入元素值,以链表方式建立二叉树,并输出结点的值。 2、分别以前序、中序和后序遍历二叉树的方式输出结点内容。 四、设计思路 1. 对于这道题,我的设计思路是先做好各个分部函数,然后在主函数中进行顺序排列,以此完成实验要求 2.二叉树采用动态数组 3.二叉树运用9个函数,主要有主函数、构建空二叉树函数、建立二叉树函数、访问节点函数、销毁二叉树函数、先序函数、中序函数、后序函数、范例函数,关键在于访问节点 五、程序代码 #include #include #include #define OK 1 #define ERROR 0 typedef struct TNode//结构体定义 {

int data; //数据域 struct TNode *lchild,*rchild; // 指针域包括左右孩子指针 }TNode,*Tree; void CreateT(Tree *T)//创建二叉树按,依次输入二叉树中结点的值 { int a; scanf("%d",&a); if(a==00) // 结点的值为空 *T=NULL; else // 结点的值不为空 { *T=(Tree)malloc(sizeof(TNode)); if(!T) { printf("分配空间失败!!TAT"); exit(ERROR); } (*T)->data=a; CreateT(&((*T)->lchild)); // 递归调用函数,构造左子树 CreateT(&((*T)->rchild)); // 递归调用函数,构造右子树 } } void InitT(Tree *T)//构建空二叉树 { T=NULL; } void DestroyT(Tree *T)//销毁二叉树 { if(*T) // 二叉树非空 { DestroyT(&((*T)->lchild)); // 递归调用函数,销毁左子树 DestroyT(&((*T)->rchild)); // 递归调用函数,销毁右子树 free(T); T=NULL; } } void visit(int e)//访问结点 { printf("%d ",e); }

二叉树的建立和遍历的实验报告doc

二叉树的建立和遍历的实验报告 篇一:二叉树的建立及遍历实验报告 实验三:二叉树的建立及遍历 【实验目的】 (1)掌握利用先序序列建立二叉树的二叉链表的过程。 (2)掌握二叉树的先序、中序和后序遍历算法。 【实验内容】 1. 编写程序,实现二叉树的建立,并实现先序、中序和后序遍历。 如:输入先序序列abc###de###,则建立如下图所示的二叉树。 并显示其先序序列为:abcde 中序序列为:cbaed 后序序列为:cbeda 【实验步骤】 1.打开VC++。 2.建立工程:点File->New,选Project标签,在列表中选Win32 Console Application,再在右边的框里为工程起好名字,选好路径,点OK->finish。至此工程建立完毕。 3.创建源文件或头文件:点File->New,选File标签,在列表里选C++ Source File。给文件起好名字,选好路径,点OK。至此一个源文件就被添加到了你刚创建的工程之中。

4.写好代码 5.编译->链接->调试 #include #include #define OK 1 #define OVERFLOW -2 typedef int Status; typedef char TElemType; typedef struct BiTNode { TElemType data; struct BiTNode *lchild, *rchild; }BiTNode,*BiTree; Status CreateBiTree(BiTree &T) { TElemType ch; scanf("%c",&ch); if (ch=='#') T= NULL; else { if (!(T = (BiTNode *)malloc(sizeof(BiTNode))))

二叉树的层次遍历算法

二叉树层次遍历算法实现 问题描述 对任意输入的表示某二叉树的字符序列,完成二叉树的层次遍历算法,并输出其遍历结果。 注:所需Queue ADT的实现见附录。 输入描述 从键盘上输入一串字符串,该字符串为二叉树的先序遍历结果,其中如果遍历到空树时用字符”#”代替。 输出描述 从显示器上输出二叉树的按层次遍历结果。 输入与输出示例 输入: +A##/*B##C##D## 输出: +A/*DBC 输入: ABD##GJ###CFH##I### 输出: ABCDGFJHI 附录(仅供参考): #include #include #define TRUE 1 #define FALSE 0 #define MAX_QUEUE_SIZE 100

//注:需要定义ElementType类型,如果是二叉树, // 则应定义为指向二叉树中结点的指针类型 //格式如: // typedef Tree ElementType; // 队列存储结构采用循环队列 struct QueueRecord; typedef struct QueueRecord *Queue; int IsEmpty(Queue Q); int IsFull(Queue Q); Queue CreateQueue(int MaxElements); void DisposeQueue(Queue Q); void MakeEmpty(Queue Q); int Enqueue(ElementType X, Queue Q); ElementType Front(Queue Q); int Dequeue(Queue Q, ElementType &X); #define MinQueueSize ( 5 ) struct QueueRecord { int Capacity; int Front; int Rear; ElementType *Array; }; int IsEmpty(Queue Q) { return ((Q->Rear + 1)% Q->Capacity == Q->Front); } int IsFull(Queue Q) { return ((Q->Rear + 2) % Q->Capacity == Q->Front); } Queue CreateQueue(int MaxElements) { Queue Q; if (MaxElements < MinQueueSize) return NULL; Q = (Queue)malloc(sizeof(struct QueueRecord));

二叉树的建立及几种简单的遍历方法

#include "stdio.h" #include "stdlib.h" #define STACK_INIT_SIZE 100 //栈存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 //------二叉树的存储结构表示------// typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; //-----顺序栈的存储结构表示------// typedef struct{ BiTree *top; BiTree *base; int stacksize; }SqStack; //*************************************************** //构造一个空栈s SqStack *InitStack(); //创建一颗二叉树 BiTree CreatBiTree(); //判断栈空 int StackEmpty(SqStack *S); //插入元素e为新的栈顶元素 void Push(SqStack *S,BiTree p); //若栈不为空,则删除s栈顶的元素e,将e插入到链表L中void Pop(SqStack *S,BiTree *q); //非递归先序遍历二叉树 void PreOrderTraverse(BiTree L); //非递归中序遍历二叉树 void InOrderTraverse(BiTree L); //非递归后序遍历二叉树 void PostOrderTraverse(BiTree L); //递归后序遍历二叉树 void PostOrder(BiTree bt); //递归中序遍历二叉树 void InOrder(BiTree bt); //递归先序遍历二叉树 void PreOrder(BiTree bt); //***************************************************

实验四 二叉树的遍历和应用04

江南大学通信与控制工程学院标准实验报告 (实验)课程名称:计算机软件技术基础实验名称:二叉树的遍历和应用 班级:自动化 姓名:李玉书 学号:03 指导教师:卢先领 江南大学通信与控制学院

江南大学 实验报告 学生姓名:张晓蔚学号:0704090304 实验地点:信控机房实验时间:90分钟 一、实验室名称:信控学院计算中心 二、实验项目名称:二叉树的遍历和应用 三、实验学时:4学时 四、实验原理: 二叉树的遍历和应用 五、实验目的: 1、掌握二叉树的数据类型描述及特点。 2、掌握二叉树的存储结构(二叉链表)的建立算法。 3、掌握二叉链表上二叉树的基本运算的实现。 六、实验内容: 阅读后面的程序,并将其输入到计算机中,通过调试为下面的二叉树建立二叉链表,并用递归实现二叉树的先序、中序、后序三种遍历。 七、实验器材(设备、元器件): 计算机 八、实验步骤: 1、输入示例程序 2、构建按序插入函数实现算法 3、用C语言实现该算法 4、与源程序合并,编译,调试 5、测试,查错,修改

6、生成可执行文件,通过综合测试,完成实验 九、实验数据及结果分析: 测试用例 初始数据:ABDH,,I,,EJ,,K,,CFL,,,G,, 测试结果 十、实验结论: 该程序可以完成线性表的常规功能,且增加了异常处理,在异常情况下,例如: 表空,删除结点号不合法或出界,删除数值未找到等,这些情况下都能作出处理。可以通过边界测试。 十一对本实验过程及方法、手段的改进建议: 对书中程序的几点错误做了改正,见源程序。 附:源程序 #include typedef struct bitree { char data ; bitree *lchild; bitree *rchild;

二叉树的建立和遍历的实验报告

竭诚为您提供优质文档/双击可除二叉树的建立和遍历的实验报告 篇一:二叉树遍历实验报告 数据结构实验报告 报告题目:二叉树的基本操作学生班级: 学生姓名:学号: 一.实验目的 1、基本要求:深刻理解二叉树性质和各种存储结构的特点及适用范围;掌握用指针类型描述、访问和处理二叉树的运算;熟练掌握二叉树的遍历算法;。 2、较高要求:在遍历算法的基础上设计二叉树更复杂操作算法;认识哈夫曼树、哈夫曼编码的作用和意义;掌握树与森林的存储与便利。二.实验学时: 课内实验学时:3学时课外实验学时:6学时三.实验题目 1.以二叉链表为存储结构,实现二叉树的创建、遍历(实验类型:验证型)1)问题描述:在主程序中设计一个简单的菜单,分别调用相应的函数功能:1…建立树2…前序

遍历树3…中序遍历树4…后序遍历树5…求二叉树的高度6…求二叉树的叶子节点7…非递归中序遍历树0…结束2)实验要求:在程序中定义下述函数,并实现要求的函数功能:createbinTree(binTree structnode*lchild,*rchild; }binTnode;元素类型: intcreatebinTree(binTree voidpreorder(binTreevoidInorder(binTree voidpostorder(binTreevoidInordern(binTreeintleaf(bi nTree intpostTreeDepth(binTree 2、编写算法实现二叉树的非递归中序遍历和求二叉树高度。1)问题描述:实现二叉树的非递归中序遍历和求二叉树高度2)实验要求:以二叉链表作为存储结构 3)实现过程: 1、实现非递归中序遍历代码: voidcbiTree::Inordern(binTreeinttop=0;p=T;do{ while(p!=nuLL){ stack[top]=p;;top=top+1;p=p->lchild;}; if(top>0){ top=top-1;p=stack[top];

实验八:二叉树的遍历与应用

实验8 二叉树的遍历与应用 一、实验目的 1.进一步掌握指针变量的含义。 2.掌握二叉树的结构特征,理解并熟悉掌握创建二叉树和实现二叉树的三种遍历。 3.学会编写实现二叉树基本操作的递归算法,领会递归的实质。 二、实验要求 1. 给出程序设计的基本思想、原理和算法描述。 2. 源程序给出注释。 3. 保存和打印出程序的运行结果,并结合程序进行分析。 三、实验题目 1.编写算法,按层输出一棵顺序存储的二叉树所有结点的值。 /**********level.c************/ #include #define VirNode 0 /*虚结点值*/ #define MAXSIZE 100 /*一维数组的容量*/ typedef int TElemType; /*二叉树结点值的类型*/ typedef TElemType SqBitTree[MAXSIZE]; /*SqBitTree:顺序存储的二叉树类型名*/ void leveltree(SqBitTree bt) { } void main() {SqBitTree bb={15,1,2,3,4,5,0,0,8,0,0,11,0,0,0,0}; ; } 2.以二叉链表为存储结构实现二叉树的三种遍历(先序、中序、后序)的递归算法。将tree.h 和tree.c文件补充完整。 3.编写算法,按层次遍历一棵二叉链表。 4.编写算法,输出二叉树中所有度为2的结点。 void printdata(BitTree bt) 5.编写算法,求二叉树中结点的最大值。假设结点为整型。 int maxvalue(BitTree bt) 6.编写递归算法,求二叉树中以元素值为x的结点为根的子树的深度。(首先在遍历过程中找到值为x结点,然后调用Get_Depth(),求得值为x的结点为根的子树的深度)。 注意:后面有算法的过程与步骤,请填空。 7.编写算法,实现二叉链表的先序非递归遍历。 void PreOrderBiTree(BitTree T)

输入某棵二叉树的广义表形式,建立该二叉树并按层次遍历该二叉树队列形式

掌握二叉树的二叉链表存储结构;掌握二叉树的遍历规则;利用二叉树的二叉链表存储结构实现二叉树的建树操作;利用二叉树的二叉链表存储结构实现二叉树层次遍历操作 二叉树采用二叉链表结构表示。设计并实现如下算法:输入某棵二叉树的广义表形式,建立该二叉树,并按层次遍历该二叉树----队列形式 #include #include #include #define STACK_MAX_SIZE 30 #define QUEUE_MAX_SIZE 30 typedef struct BitNode{ char data; struct BitNode *lchild; struct BitNode *rchild; }BitNode,*BiTree;; typedef struct node { BitNode *data; }node,*queue; typedef struct Queue { node *base; int front; int rear; }Queue; void InitQueue(Queue *Q) { Q->base=(queue)malloc(QUEUE_MAX_SIZE*sizeof(node)); Q->front=Q->rear=0; }

int EmptyQueue(Queue *Q) { if(Q->front==Q->rear) return 1; else return 0; } void EnQueue(Queue *Q,BitNode *e) { Q->base[Q->rear].data=e; Q->rear++; } BiTree DeQueue(Queue *Q) { int m; m=Q->front; Q->front++; return (Q->base[m].data); } char a[50]; BiTree CreatBiTree(BiTree T) { BiTree p; BiTree s[STACK_MAX_SIZE]; int top = -1; int flag; int i = 0; T=NULL; while(a[i]!='#') { switch(a[i]) {case' ':break; case '(': top++;

数据结构二叉树遍历及线索化后各种操作(绝对无错)

实验二二叉树的存储结构及各种运算的实现第一题: #include "stdio.h" #include "malloc.h" #define maxsize 66 typedef int datatype; typedef struct node { datatype data ; struct node *lchild,*rchild; } bitree; bitree *Q[maxsize]; bitree *creatree() { char ch; int front,rear; bitree *root,*s; root=NULL; front=1;rear=0; ch=getchar(); while (ch!='#') { s=NULL; if(ch!='@') { s=malloc(sizeof(bitree)); s->data=ch; s->lchild=NULL; s->rchild=NULL; } rear++; Q[rear]=s; if(rear==1) root=s; else { if (s&&Q[front]) if(rear%2==0) Q[front]->lchild=s; else Q[front]->rchild=s; if(rear%2==1)

front++; } ch=getchar(); } return root; } preorder(bitree *t) //前{ if (t) { printf(" %c ",t->data); preorder(t->lchild); preorder(t->rchild); } } inorder(bitree *t) //中{ if (t) { inorder(t->lchild); printf(" %c ",t->data); inorder(t->rchild); } } postorder(bitree *t) //后{ if (t) { postorder(t->lchild); postorder(t->rchild); printf(" %c ",t->data); } } int height(bitree *t) //高度{ int hl,hr; if(!t) return 0; else { hl=height(t->lchild); hr=height(t->rchild); return ((hl>hr?hl:hr)+1); } }

二叉树的遍历算法实验报告

二叉树实验报告 09信管石旭琳 20091004418 一、实验目的: 1、理解二叉树的遍历算法及应用 2、理解哈夫曼树及其应用。 3、掌握哈夫曼编码思想。 二、实验内容: 1、建立二叉树二叉链表 2、实现二叉树递归遍历算法(中序、前序、后序) 3、求二叉树高度 4、求二叉树结点个数 5、求二叉树叶子个数 6、将序号为偶数的值赋给左子树 三、主要程序: #include #include typedef int ElemType; struct BiTNode { ElemType data; struct BiTNode *lch,*rch; }BiTNode,*BiTree; struct BiTNode *creat_bt1(); struct BiTNode *creat_bt2(); void preorder (struct BiTNode *t); void inorder (struct BiTNode *t); void postorder (struct BiTNode *t); void numbt (struct BiTNode *t); int n,n0,n1,n2; void main() { int k; printf("\n\n\n"); printf("\n\n 1.建立二叉树方法1(借助一维数组建立)"); printf("\n\n 2.建立二叉树方法2(先序递归遍历建立)"); printf("\n\n 3.先序递归遍历二叉树"); printf("\n\n 4.中序递归遍历二叉树"); printf("\n\n 5.后序递归遍历二叉树"); printf("\n\n 6.计算二叉树结点个数"); printf("\n\n 7.结束程序运行");

数据结构课程设计--按层次遍历二叉树

数据结构课程设计--按层次遍历二叉树学号: 题目按层次遍历二叉树学院计算机科学与技术专业计算机科学与技术 班级 姓名 指导教师 2013年6月20日 1 1问题描述及要求 (4) 1.1问题描述 (4) 1.2任务要求.................................. 4 2 开发平台及所使用软件.............................. 4 3 程序设计思路.. (5) 3.1二叉树存储结构设计 (5) 3.2题目算法设

计 (5) 3.2.1 建立二叉树 (5) 3.2.2 遍历二叉树 (5) 3.3.3 按要求格式输出已建立的二叉 树 (6) 3.3 测试程序................................ 6 4 调试 报告.................................... 6 5 经验和体会.................................. 6 6 源程序清单及运行结果 (7) 6.1 源程序清单 (7) 6.2 运行结果................................ 9 7 参考文献................................... 10 本科生课程设计成绩评定表 (11) 2 课程设计任务书 学生姓名:专业班级:计科ZY1102班指导教师:工作单位:计算机科学系题目: 按层次遍历二叉树 初始条件:

编写按层次顺序(同一层自左至右)遍历二叉树的算法。 (1)二叉树采用二叉链表作为存储结构。 ⑵按严蔚敏《数据结构习题集(C语言版)》p44面题6.69所指定的格式输出建立的二叉树。 (3)输出层次遍历结果。 (4)自行设计测试用例。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容:1.问题描述 简述题目要解决的问题是什么。 2. 设计 存储结构设计、主要算法设计(用类C/C++语言或用框图描述)、测试用例设计; 3. 调试报告 调试过程中遇到的问题是如何解决的; 对设计和编码的讨论和分析。 4. 经验和体会(包括对算法改进的设想) 5. 附源程序清单和运行结果。源程序要加注释。如果题目规定了测试数据,则运行结 果要包含这些测试数据和运行输出。 说明: 1. 设计报告、程序不得相互抄袭和拷贝; 若有雷同,则所有雷同者成绩均为0 分。 2. 凡拷贝往年任务书或课程设计充数者,成绩一律无效,以0 分记。时间安排: 1(第17周完成,验收时间由指导教师指定

树的存储结构、遍历;二叉树的定义、性质、存储结构、遍历以及树、森林、二叉树的转换

树和二叉树 树与二叉树是本书的重点内容之一,知识点多且比较零碎。其中二叉树又是本章的重点。 在本章中我们要了解树的定义、熟悉树的存储结构、遍历;二叉树的定义、性质、存储结构、遍历以及树、森林、二叉树的转换。哈夫曼树及哈夫曼编码等内容。 算法的重点是二叉树的遍历及其应用。 6.1 树的定义 一、树的定义 树:树是n(n>0)个结点的有限集合T。一棵树满足下列条件: (1)有且仅有一个称为根的结点; (2)其余结点可分为m(m>=0)棵互不相交的有限集合T1,T2,T3,…Tm, 其中每个集合又是一棵树,并称之为根的子树。 有关树的一些基本概念: 1)结点的度:树中每个结点具有的子树数目或后继结点数。 如图中结点A的度为2,B的度为3 2) 树的度:所有结点的度的最大值为树的度。 (图中树的度为3) 3) 分支结点:即:树中所有度大于0的结点。 4) 叶子结点:即:树中度为零的结点,也称为终端结点。 5) 孩子结点:一个结点的后续结点称为该结点的孩子结点。 6) 双亲结点:一个结点为其后继结点的双亲结点。 7) 子孙结点:一个结点的所有子树中的结点为该结点的子孙结点。 8) 祖先结点:从根结点到一个结点的路径上所有结点(除自己外) 称为该结点的祖先结点。(如A和B为D结点的祖先结点) 9) 兄弟结点:具有同一父亲的结点互相为兄弟结点。(如B和C为兄弟结点) 10) 结点的层数:从根结点到该结点的路径上的结点总数称为该结点的层数(包括该结点)。 11) 树的深度(高度):树中结点的最大层数为树的深度。(图中树的深度为4) 12) 森林:0个或多个互不相交的树的集合。 上图中:树的度为3,树的深度为4。 结点A,B,C,D,E,F,G,H,I,J的度分别为:2, 3, 2, 0 ,2 , 0, 0, 0, 0, 0 叶结点有:D, F, G, H, I, J B,C为兄弟,D, E, F为兄弟,F, G为兄弟。I,J为兄弟。 二、树的表示 1. 树的逻辑结构描述 Tree=(D,R) 其中:D为具有相同性质的数据元素的集合。 R为D上元素之间的关系集合。 如上图中的树: D=(A,B,C,D,E,F,G,H,I,J) R={,,,,,,,,} 2. 树的逻辑表示方法: (1)树形表示法:如一棵倒立的树,从根结点开始一层层向下扩展,根结点在上,叶结点在下。

二叉树的遍历实验报告

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

三、各模块设计分析 (1)建立二叉树结构 建立二叉树时,要先明确是按哪一种遍历规则输入,该二叉树是按你所输入的遍历规则来建立的。本实验用的是先序遍历的规则进行建树。 二叉树用链表存储来实现,因此要先定义一个二叉树链表存储结构。因此要先定义一个结构体。此结构体的每个结点都是由数据域data 、左指针域Lchild 、右指针域Rchild 组成,两个指针域分别指向该结点的左、右孩子,若某结点没有左孩子或者右孩子时,对应的指针域就为空。最后,还需要一个链表的头指针指向根结点。 要注意的是,第一步的时候一定要先定义一个结束标志符号,例如空格键、#等。当它遇到该标志时,就指向为空。 建立左右子树时,仍然是调用create ()函数,依此递归进行下去,

直到遇到结束标志时停止操作。 (2)输入二叉树元素 输入二叉树时,是按上面所确定的遍历规则输入的。最后,用一个返回值来表示所需要的结果。 (3)先序遍历二叉树 当二叉树为非空时,执行以下三个操作:访问根结点、先序遍历左子树、先序遍历右子树。 (4)中序遍历二叉树 当二叉树为非空时,程序执行以下三个操作:访问根结点、先序遍历左子树、先序遍历右子树。 (5)后序遍历二叉树 当二叉树为非空时,程序执行以下三个操作:访问根结点、先序遍历左子树、先序遍历右子树。 (6)主程序 需列出各个函数,然后进行函数调用。 四、各函数定义及说明 因为此二叉树是用链式存储结构存储的,所以定义一个结构体用以存储。 typedef struct BiTNode { char data; struct BiTNode *Lchild; struct BiTNode *Rchild;

数据结构实验二叉树的遍历

南昌大学实验报告 学生姓名:李木子学号:专业班级:软工 实验类型:□验证□综合□设计□创新实验日期:实验成绩:一、实验项目名称 二叉树的遍历 二、实验目的 学会链式二叉树的结构体定义,创建与前序中序后序遍历三、实验基本原理 四、主要仪器设备及耗材 电脑, 五、实验步骤 ************************************** * 链式二叉树的创建与遍历 * ************************************** ************************************** * 链式二叉树的结构体定义 * ************************************** <> <> ; { ; *; *; };

************************************** * 链式二叉树函数声明 * ************************************** *(); (*); (*); (*); ************************************** * 链式二叉树创建函数 * ************************************** *() { ; *; (); ('') ; ('\'); { (*)(()); >; >(); >(); } ; } ************************************** * 链式二叉树递归前序遍历函数 * ************************************** (*) { () { ("\">);

层次遍历二叉树

课程设计 题目按层次遍历二叉树 学院计算机科学与技术 专业计算机科学与技术 班级0801 姓名陈新 指导教师孙玉芬 2012 年 6 月20 日

课程设计任务书 学生姓名:专业班级: 指导教师:孙玉芬工作单位:计算机科学系 题目: 按层次遍历二叉树 初始条件: 编写按层次顺序(同一层自左至右)遍历二叉树的算法。 (1)二叉树采用二叉链表作为存储结构。 (2)按题集p44面题6.69所指定的格式输出建立的二叉树。 (3)输出层次遍历结果。 (4)测试用例自己设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容: 1、问题描述 简述题目要解决的问题是什么。 2、设计 存储结构设计、主要算法设计(用类C语言或用框图描述)、测试用例设计; 3、调试报告 调试过程中遇到的问题是如何解决的;对设计和编码的讨论和分析。 4、经验和体会(包括对算法改进的设想) 5、附源程序清单和运行结果。源程序要加注释。如果题目规定了测试数据,则运行结果要包含这些测试数据和运行输出, 6、设计报告、程序不得相互抄袭和拷贝;若有雷同,则所有雷同者成绩均为0分。 时间安排: 1、第19周完成。 2、6月21日8:00到计算中心检查程序、交课程设计报告、源程序。 指导教师签名: 系主任(或责任教师)签名:年月日

数据结构课程设计 ——按层次遍历二叉树 1问题描述及要求 1.1问题描述 编写按层次顺序(同一层自左至右)遍历二叉树的算法。 1.2任务要求 编写按层次顺序(同一层自左至右)遍历二叉树的算法。 (1)二叉树采用二叉链表作为存储结构。 (2)按题集p44面题6.69所指定的格式输出建立的二叉树。 (3)输出层次遍历结果。 (4)测试用例自己设计。 2开发平台及所使用软件 Windows 7.0 , Visual C++6.0 3程序设计思路 3.1二叉树存储结构设计 typedef char ElemType; //二叉树结点值的类型为字符型 typedef struct BiTNode{ //二叉树的二叉链表存储表示 ElemType date; struct BiTNode *lchild,*rchild; //左右孩子指针 } BiTNode,*BiTree; 3.2题目算法设计 3.2.1建立二叉树 void CreateBinTree(BinTree &T){ //按先序次序输入,构造二叉链表表示的二叉树T char ch; ch=getchar(); //输入函数。 if(ch==’’) T=NULL; //输入空格时为空 else{ if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) printf("%c" "结点建立失败!") ; T->data=ch; CreateBinTree(T->lchild); CreateBinTree(T->rchild);

二叉树的遍历及线索化

青岛理工大学数据结构课程实验报告

void PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e)){ if(T){ Visit(T->data);//首先访问根结点 PreOrderTraverse(T->lchild,Visit);//然后递归遍历左子树 PreOrderTraverse(T->rchild,Visit);//最后递归遍历右子树}} //中序遍历时先递归遍历左子树,然后访问根结点,最后递归遍历右子树;后序遍历时先递归遍历左子树,然后递归遍历右子树,最后 访问根结点 3、//先把栈及队列相关操作的头文件包括进来 1)根指针入栈, 2)向左走到左尽头(入栈操作) 3)出栈,访问结点 4)向右走一步,入栈,循环到第二步,直到栈空 //层次遍历时,若树不空,则首先访问根结点,然后,依照其双亲结 点访问的顺序,依次访问它们的左、右孩子结点; 4.首先建立二叉线索存储:包含数据域,左右孩子指针以及左右标志 typedef enum { Link=0,Thread=1 } PointerTag; typedef struct BiThrNode{ TElemType data; struct BiThrNode *lchild,*rchild;//左右孩子指针 PointerTag LTag,RTag;//左右标志 }BiThrNode, *BiThrTree; 建立前驱线索和后继线索,并用中序遍历进行中序线索化,然后最 后一个结点线索化 调 试 过 程 及 实 验 结 果 把测试数据放在f:\\file\\data.txt里,测试数据为:1 2 4 0 0 0 3 5 0 0 0 总访问结点是指访问该结点的数据域,弄清楚各个指针所指的类型

相关文档
最新文档