二叉树的遍历及其应用实验报告

时间:2024.4.20

实 验 报 告

1FP24140-0.jpg

题目:    二叉树的遍历及应用 

院系:          数学系       

专业:      数学与应用数学   

学号:        2010114036     

姓名:          郭奇瑞       

一、  实验名称:二叉树的遍历及应用

二、  实验日期:20##年11月14日

三、  实验要求:编程实现二叉树的建立并对其进行遍历

四、  实验目的:

1、    掌握二叉树链式存储结构的类型定义及实现;

2、    掌握二叉树链式存储结构的各类基本运算方法;

3、    掌握二叉树各个重要性质在解决实际问题中的应用;

4、    掌握二叉树的分析方法、解决方法,从而提高实际编程能力及程序调试能力。

五、  实验内容

1、    创建二叉树;

2、    用递归方法实现二叉树的各种遍历。

六、  程序代码

#include<stdio.h>

#include<malloc.h>

#define TRUE 1

#define FALSE 0

#define Stack_Size 50

typedef struct Node

{

char data;

struct Node  *LChild;

struct Node  *RChild;

}BiTNode,*BiTree;

typedef BiTree StackElementType;

typedef struct

{

StackElementType elem[Stack_Size];

int top;

}SeqStack;

//初始化

void InitStack(SeqStack *S)

{

S->top=-1;

}

//进栈

int Push(SeqStack *S,StackElementType x)

{ if(S->top==Stack_Size-1) return(FALSE);

S->top++;

S->elem[S->top]=x;

return(TRUE);

}

//出栈

int Pop(SeqStack *S,StackElementType *x)

{

if(S->top==-1)

return(FALSE);

else

{

*x=S->elem[S->top];

S->top--;

return(TRUE);

}

}

//先序遍历

void PreOrder(BiTree root)

{

if(root!=NULL)

{

printf("%c",root->data);

PreOrder(root->LChild);

PreOrder(root->RChild);

}

}

//中序遍历

void InOrder(BiTree root)

{ if(root!=NULL)

{ InOrder(root->LChild);

printf("%c",root->data);

InOrder(root->RChild);

}

}

//后序遍历

void PostOrder(BiTree root)

{

if(root!=NULL)

{

PostOrder(root->LChild);

PostOrder(root->RChild);

printf("%c",root->data);

}

}

   //创建二叉链表

void CreateBiTree(BiTree *bt)

{

char ch;

ch=getchar();

if(ch=='.') *bt=NULL;

else

{

*bt=(BiTree)malloc(sizeof(BiTNode));

(*bt)->data=ch;

CreateBiTree(&((*bt)->LChild));

CreateBiTree(&((*bt)->RChild));

}

}

//后序遍历球二叉树高度

int PostTreeDepth(BiTree bt)

{

int hl,hr,max;

if(bt!=NULL)

{

hl=PostTreeDepth(bt->LChild);

hr=PostTreeDepth(bt->RChild);

max=hl>hr?hl:hr;

return(max+1);

}

else return(0);

}

//横向打印二叉树

void PrintTree(BiTree bt,int nLayer)

{

int i;

if(bt==NULL) return;

PrintTree(bt->RChild,nLayer+1);

for( i=0;i<nLayer;i++)

printf(" ");

printf("%c\n",bt->data);

PrintTree(bt->LChild,nLayer+1);

}

void main()

{

BiTree root;

printf("请输入序列:\n");

CreateBiTree(&root);

printf("输出结果为:\n");

printf("先序遍历结果:\n");

PreOrder(root);

printf("\n中序遍历结果:\n");

InOrder(root);

printf("\n后序遍历结果:\n");

PostOrder(root);

printf("\n二叉树的深度:\n");

printf("%d",PostTreeDepth(root));

printf("\n横向打印二叉树结果:\n");

PrintTree(root,5);

}

七、  成果展示


第二篇:二叉树的建立及遍历实验报告


实验三:二叉树的建立及遍历

【实验目的】

(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 <stdio.h>

#include <malloc.h>

#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))))

               return OVERFLOW;

         T->data = ch;             

         CreateBiTree(T->lchild); 

         CreateBiTree(T->rchild);       

   }

    return OK;

} // CreateBiTree

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->rchild);

printf("%c",T->data);

  

    }

}

void main()

{

   BiTree T;

   CreateBiTree(T);

   printf("\n先序遍历序列:");

   PreOrder(T);

  

   printf("\n中序遍历序列:");

   InOrder(T);

   printf("\n后序遍历序列:");

   PostOrder(T);

}

【实验心得】

 这次实验主要是通过先序序列建立二叉树,和二叉树的先序、中序、后续遍历算法。通过这次实验,我巩固了二叉树这部分知识,从中体会理论知识的重要性。   

   在做实验之前,要充分的理解本次实验的理论依据,这样才能达到事半功倍的效果。如果在没有真正理解实验原理之盲目的开始实验,只会浪费时间和精力。

例如进行二叉树的遍历的时候,要先理解各种遍历的特点。先序遍历是先遍历根节点,再依次先序遍历左右子树。中序遍历是先中序遍历左子树,再访问根节点,最后中序遍历右子树。而后序遍历则是先依次后续遍历左右子树,再访问根节点。

掌握了这些,在实验中我们就可以融会贯通,举一反三。

    所以,这次实验让我懂得了理论知识的重要性,只有领悟了最基本的知识,在实验过程中我们才能够独立的思考,大胆的推断,不断的创新,进而提高动手能力。

更多相关推荐:
实验六 二叉树实验报告(1)

实验四二叉树的操作班级:计算机1002班姓名:**学号:**完成日期:20XX.6.14题目:对于给定的一二叉树,实现各种约定的遍历。一、实验目的:(1)掌握二叉树的定义和存储表示,学会建立一棵特定二叉树的方法…

二叉树实验报告

实验六树和二叉树的操作一实验目的1进一步掌握树的结构及非线性特点递归特点和动态性2进一步巩固对指针的使用和二叉树的三种遍历方法建立方法二实验内容二叉树的实现和运算三实验要求1用CC完成算法设计和程序设计并上机调...

树和二叉树实验报告

树和二叉树一实验目的1掌握二叉树的结构特征以及各种存储结构的特点及适用范围2掌握用指针类型描述访问和处理二叉树的运算二实验要求1认真阅读和掌握本实验的程序2上机运行本程序3保存和打印出程序的运行结果并结合程序进...

二叉树基本操作--实验报告

宁波工程学院电信学院计算机教研室实验报告一实验目的1熟悉二叉树树的基本操作2掌握二叉树的实现以及实际应用3加深二叉树的理解逐步培养解决实际问题的编程能力二实验环境1台WINDOWS环境的PC机装有VisualC...

二叉树实验报告

二叉树实验报告问题描述1问题描述用先序递归过程建立二叉树存储结构二叉链表输入数据按先序遍历所得序列输入当某结点左子树或右子树为空时输入号如输入abcde得到的二叉树为编写递归算法计算二叉树中叶子结点的数目按凹入...

二叉树实验报告

数据结构课程设计报告专业计算机科学与技术班级3班姓名学号指导教师起止时间20xx1220xx1课程设计二叉树一任务描述二叉树的中序前序后序的递归非递归遍历算法应包含建树的实现任务设计一个程序实现二叉树的前序中序...

二叉树的遍历实验报告

二叉树的遍历实验报告一需求分析在二叉树的应用中常常要求在树中查找具有某种特征的结点或者对树中全部结点逐一进行某种处理这就是二叉树的遍历问题对二叉树的数据结构进行定义建立一棵二叉树然后进行各种实验操作二叉树是一个...

二叉树基本操作--实验报告

实验三二叉树的基本操作学院物理与电子学院班级电信1105班姓名刘岩学号1404110729一实验目的1熟悉二叉树的基本操作掌握二叉树的实现以及实际应用3加深对于二叉树的理解逐步培养解决实际问题的编程能力二实验环...

实验报告(二叉树)

仲恺农业工程学院实验报告纸信息科学与技术院系计算机专业144班数据结构与算法课一实验目的1掌握二叉树的特点以及的二叉链表存储结构2熟练掌握二叉树的各种操作如建立遍历查找和输出3利用已经掌握的知识进行实际应用二实...

数据结构树和二叉树实验报告

数据结构课程实验报告注空间不够可以增加页码

数据结构-二叉树实验报告

数据结构实验报告课程数据结构实验名称二叉树实验院系电信学院专业班级计科104姓名学号一实验构思首先构造二叉树的存储结构用data存储当前节点的值分别用lchildrchild表示该节点的左右孩子然后应用BiTr...

数据结构实验三——二叉树基本操作及运算实验报告

39985504doc数据结构与数据库实验报告实验题目二叉树的基本操作及运算学院化学与材料科学学院专业班级09级材料科学与工程系PB0920xx3姓学邮名李维谷号PB0920xx85箱liwgmail指导教师贾...

二叉树实验报告(43篇)