数据结构二叉树程序及实验报告

时间:2024.4.20

实验三 树

1.实验目的

通过本实验,使学生加深对二叉树的基本概念的理解;掌握掌握二叉排序树的插入和生成;掌握二叉树遍历操作及应用。

2.实验内容

创建一个二叉树,并进行先序遍历、中序遍历、后序遍历、层次遍历,打印二叉树的叶子结构,并统计叶子结点个数和总结点个数。

3.实验要求

(1)设计一个程序实现上述过程。

(2)采用二叉链表存储结构。

4、实验步骤

#include "stdio.h"

#include "malloc.h"

 #define ELEMTYPE char

 typedef struct BiTNode { ELEMTYPE data;

 struct BiTNode

*lchild,*rchild; } BiTNode;

BiTNode *bulid()  /*建树*/

 { BiTNode *q;

 BiTNode *s[20];

int i,j; char x;

printf("请按顺序输入二叉树的结点以输入0和*号结束\n");

printf("请输入你要输入的为第几个结点i=\n");

scanf("%d",&i); printf("请输入你要输入该结点的数为x=");

getchar();

scanf("%c",&x);

while(i!=0&&x!='*')

 {

q=(BiTNode*)malloc(sizeof(BiTNode));

q->data=x; q->rchild=NULL;

 q->lchild=NULL; s[i]=q; if(i!=1)

{ j=i/2; if(i%2==0) s[j]->lchild=q; else s[j]->rchild=q; }

 printf("请输入你要输入的为第几个结点x=\n");

scanf("%d",&i); printf("请输入你要输入该结点的数x=");

getchar(); scanf("%c",&x);}

return s[1]; }

void preoder(BiTNode *bt)        /*先序遍历*/

 { if(bt!=NULL)

 { printf("%c\n",(bt->data)); preoder(bt->lchild); preoder(bt->rchild); }

}

void InOrder(BiTNode *bt)     /*中序遍历*/

{ if(bt!=NULL) { InOrder(bt->lchild); printf("%c\n",bt->data); InOrder(bt->rchild); }

}

void postOrder(BiTNode *bt)   /*后序遍历*/

{ if(bt!=NULL) { postOrder(bt->lchild); postOrder(bt->rchild); printf("%c\n",bt->data); }

}

 Int main()

{

 int a;

BiTNode *bt; bt=bulid();

 k1:

 printf("需要先序遍历输出请输入1,中序遍历请输入2,后序遍历请输入3,结束输入0:"); scanf("%d",&a);

 switch(a)

 { case(1): preoder(bt); goto k1; case(2): InOrder(bt); goto k1; case(3): postOrder(bt); goto k1; case(0): break; }

5、实验结果


第二篇:数据结构之二叉树编程实验报告


实验报告:

二叉树

题目:

         建立一棵二叉树,数据以字符串形式从键盘输入,在此二叉树上完成:

(1)       前序、中序、后序遍历

(2)       求出叶子数

(3)       求树高

(4)       左右子树交换,输出交换后的前序、中序遍历序列

分析:

建树:

         输入的字符串序列为带有空节点的前序遍历序列(空节点用*表示)。

①:前序,中序,后序遍历:递归遍历

②:求叶子数:

         当一个节点的左右孩子都是NULL时,此节点即为叶子节点。

③:求树高

         当前节点的树高等于其左右孩子树高大的加1。

④:左右子树交换:

         对于每个节点,将其左右孩子交换,再递归对其左右子树交换。

测试结果:

附:源码

#include <iostream>

#include <stdlib.h>

using namespace std;

struct Bintree

{

         char data;

         Bintree* lchild;

         Bintree* rchild;

};

Bintree *head;

int sp;

/*     已知一棵二叉树的前序序列,建立这棵树      */

void CreateTree(Bintree *&p,char a[])

{

         Bintree *temp;

         if(a[sp]!=0)

         {

                   if(a[sp]=='*')

                   {

                            p=NULL;

                            sp++;

                            return ;

                   }

                   p=new Bintree;

                   p->data=a[sp++];

                   CreateTree(p->lchild,a);

                   CreateTree(p->rchild,a);

         }

         else p=NULL;

}

/*                  求一棵树的高度            */

int Depth(Bintree *&t)

{

    int  lh , rh ;

    if( t == NULL )

    {

        return 0 ;

    }

    else

    {

        lh = Depth( t->lchild ) ;

        rh = Depth( t->rchild ) ;

        return ( lh > rh ? lh : rh ) + 1 ;

    }

}

/*          将二叉树的左右子树互换         */

void Exchange1(Bintree *&t)

{

    Bintree *temp;

    if(t)

    {

        Exchange1(t->lchild);

        Exchange1(t->rchild);

        temp=t->lchild;

        t->lchild=t->rchild;

        t->rchild=temp;

    }

}

/*          按照前序递归遍历二叉树         */

void Preorder1(Bintree *&t)

{

    if(t!=NULL)

    {

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

        Preorder1(t->lchild);

        Preorder1(t->rchild);

    }

}

/*          按照中序递归遍历二叉树         */

void Inorder1(Bintree *&t)

{

    if(t!=NULL)

    {

        Inorder1(t->lchild);

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

        Inorder1(t->rchild);

    }

}

/*          按照后序递归遍历二叉树         */

void Posorder1(Bintree *&t)

{

    if(t!=NULL)

    {

        Posorder1(t->lchild);

        Posorder1(t->rchild);

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

    }

}

/*        递归法求叶子结点个数             */

int Leaves_Num1(Bintree *&t)

{

    if(t)

    {

        if(t->lchild==NULL&&t->rchild==NULL)

        {

            return 1;

        }

        return Leaves_Num1(t->lchild)+Leaves_Num1(t->rchild);

    }

    return 0;

}

/*******************************************/

int main ()

{

         char a[100];

         memset(a,0,sizeof(a));

        

         cout<<"输入带有空节点的前序遍历序列(空节点用*表示)"<<endl;

         cin>>a;

         sp=0;

         CreateTree(head,a);

         cout<<"前序遍历:"<<endl;

         Preorder1(head);

         cout<<endl;

         cout<<"中序遍历:"<<endl;

         Inorder1(head);

         cout<<endl;

         cout<<"后序遍历:"<<endl;

         Posorder1(head);

         cout<<endl;

         cout<<"叶子数:"<<Leaves_Num1(head)<<endl;

         cout<<"树高:"<<Depth(head)<<endl;

         cout<<"左右子树交换后"<<endl;

         Exchange1(head);

         cout<<"前序遍历:"<<endl;

         Preorder1(head);

         cout<<endl;

         cout<<"中序遍历:"<<endl;

         Inorder1(head);

         cout<<endl;

         cout<<"后序遍历:"<<endl;

         Posorder1(head);

         cout<<endl;

         return 0;

}

更多相关推荐:
数据结构二叉树实验报告

实验三二叉树的遍历一实验目的熟悉二叉树的结点类型和二叉树的基本操作掌握二叉树的前序中序和后序遍历的算法3加深对二叉树的理解逐步培养解决实际问题的编程能力二实验环境运行或VC的微机三实验内容1依次输入元素值以链表...

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

北京林业大学12学年13学年第1学期数据结构实验报告书专业自动化班级111姓名宁友菊学号111044120实验地点B2机房任课教师孟伟实验题目二叉树的基本操作实验环境VisualC实验目的1掌握二叉树的定义2掌...

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

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

数据结构二叉树实验报告(附代码)

一实验构思Conceive10本部分应包括描述实验实现的基本思路包括所用到的离散数学工程数学程序设计算法等相关知识首先构造二叉树的存储结构用data存储当前节点的值分别用lchildrchild表示该节点的左右...

数据结构二叉树操作实验报告

实验报告指导教师XX实验时间20xx年11月1日学院计算机学院专业信息安全班级XXXXXX学号XXXXX姓名XX实验室S331实验题目二叉树操作实验要求采用二叉树链表作为存储结构完成二叉树的建立先序中序和后序以...

数据结构二叉树综合实验报告

武汉工程大学计算机科学与工程学院《数据结构》实验报告[2]

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

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

数据结构实验报告 二叉树

实验报告实验目的1掌握树及二叉树的基本概念2掌握二叉树的存储结构3掌握二叉树的遍历实验内容算术表达式与二叉树之间存在着对应关系编写一算法将前缀形式输入的算术表达式按中缀方式输出实验原理根据访问二叉树根节点的顺序...

数据结构实验报告二叉树遍历

江西理工大学数据结构实验报告实验名称一元多项式相减日期20xx42专业班级计算机131桌号实验人张亮学号20xx3204同组人一实验目的综合应用所学的知识分析问题解决问题学会用建立二叉树并对其进行遍历提高实际编...

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

实验名称学生姓名班级班内序号学号日期数据结构实验报告实验四题目1用二叉链表实现一个二叉树20xx21112820xx21077120xx12051实验目的掌握二叉树基本操作的实现方法根据二叉树的抽象数据类型的定...

数据结构实验报告 实验三 二叉树的建立与遍历

昆明理工大学信息工程与自动化学院学生实验报告201201学年第一学期课程名称数据结构开课实验室年月日一实验内容二叉树的建立与遍历其中遍历有前序遍历中序遍历和后序遍历以及二叉树中序线索化及线索化遍历二实验目的学会...

《数据结构》上机实验报告—二叉树的建立和遍历

福州大学数计学院数据结构上机实验报告验内容名称

数据结构二叉树实验报告(35篇)