实验三 树和二叉树的建立和应用

时间:2024.3.31

实验三 二叉树的建立和应用

1、实验目的

(1)熟练掌握树的基本概念、二叉树的基本操作及在链式存储结构上的实现;

(2)重点掌握二叉树的生成、遍历及求叶子结点算法;

(3)掌握运用递归方式描述算法及编写递归C程序的方法,提高算法分析和程序设计能力。

2、实验内容

1)按照已知二叉树,从键盘读入节点字符,建立二叉树(例如,ABD#G###CE##FH###)2)分别采用先序、中序、后序及层次遍历该二叉树,分别输出遍历结果。

3)应用:求出该数的叶子结点数。

3、实验步骤

(1)仔细分析实验内容,给出其算法和流程图;

(2)用C语言实现该算法;

(3)给出测试数据,并分析其结果;

(4)在实验报告册上写出实验过程。

4、测试数据 A

1)所创建的树如右图所示:

2)遍历结果: B C 先序序列: ABDGCEFH

中序序列: DGBAECHF

后序序列: GDBEHFCA D E F 层次遍历:ABCDEFGH

3)叶子结点数:3

5、树的结点结构定义如下: G H typedef struct BiTNode

{

char data;

struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

6、实验报告要求

实验三 二叉树的建立和应用

姓名: 班级: 学号: 日期: 实验目的:

实验内容:

基本思想、原理和算法描述:

源程序:

运行结果分析:

实验总结:


第二篇:GJQ实验3 排序二叉树的建立和查找


《软件技术基础》实验指导书

实验三  排序二叉树的建立和查找

一、实验题目:排序二叉树的建立和查找

二、实验目的:掌握非线性数据结构的描述方法

三、实验内容:

(1)附录中是用链式结构实现二叉树的建立、查询和打印的源程序。请将他们输入计算机,编译、连接并运行。

(2)读懂上述程序,并编写删除一个结点的子函数。

四、实验报告要求:

                         《软件技术基础》实验报告

实验名称:排序二叉树的建立和查找

班级:            学号:               姓名:

实验目的:掌握非线性数据结构的描述方法

实验内容:

(1)附录中是用链式结构实现二叉树的建立、查询和打印的源程序。请将他们输入计算机,编译、连接并运行。

(2)读懂上述程序,并编写删除一个结点的子函数。

实验原理:写出删除排序二叉树中一个结点的算法(形式语言)。

实验步骤:写出调试、查找程序中问题的思路和步骤。

实验结果:写出删除排序二叉树中一个结点的子程序。

附录:二叉树的建立、查询、打印和遍历的源程序:

#include<iostream.h>

#include<stdio.h>

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

//define the structure of an element of a tree

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

struct tree {                         

    char info;                          

    struct tree *left,*right;           

};

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

//explanation the functions

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

struct tree *create_btree(struct tree *root,struct tree *r,char info);

struct tree *search_btree(struct tree *root,char key);

void  print_btree(struct tree *r,int l);

void PreOrder(struct tree *T);          //先序递归遍历二叉树

void InOrder(struct tree *T);           //中序递归遍历二叉树

void PostOrder(struct tree *T); 

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

// the main function

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

void main()

{   char s[100], c ;                    

    struct tree *root=0, *p;      

        printf("Input a letter for Creating the Binary_Tree ( Directly press <Enter> to stop ):\n");

    do {

        printf("Input a letter: ");

        gets(s);

        if (!root)

            root=create_btree(root,root,*s);

        else

            create_btree(root,root,*s);

       

    }  while (*s) ;

    while ( c!='!')

    {

        print_btree(root,0);

        printf("Enter a character to find( '!' to stop ):");

        scanf("%s",&c);

        printf("\n");

        p=search_btree(root,c);

        printf("\n");

    }

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

 PreOrder(root);          //先序递归遍历二叉树

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

 InOrder(root); 

    printf("\n后序遍历结果:");       //中序递归遍历二叉树

 PostOrder(root); 

    printf("\n");

}   /* Btree.C 结束  */

  

struct tree *create_btree(struct tree *root,struct tree *r,char info)

{  if (r ==0 )

{    r=new (struct tree);

if ( r == 0)

{  printf("Out of memory\n");   return 0 ;  }

r->left= 0;  r->right=0;   r->info=info;

if (root)

{  if(info<root->info)    root -> left=r;

else                      root->right=r;

}

else

{    r->right=0;   r->left = 0;  }

return  r;

}   

if (info < r->info)

create_btree(r,r->left,info);

if(info>=r->info)

create_btree(r,r->right,info);

}    /*   create_btree(root,r,info)      */

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

//tree *search_btree(struct tree *root,char key)

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

struct tree *search_btree(struct tree *p,char key)

{   struct tree *root;

    root=p;

    if (!root)

    {  printf("Empty btree\n");   return root;  }                            

    while(root->info!=key)          

        {   if(key<root->info)         

                root=root->left;

            else

                root=root->right;

            if(root==0)

            {  printf("Search Failure\n");

               return 0;

            }

        }  /* while(root->info!=key)   */

    if (root !=0)

    printf("Successful search\n key=%c\n",root->info);

    return root ;

}  /*     *search_btree(root,key)     */

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

// print_btree

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

void print_btree(struct tree *r,int l)

{    int i;

    if (r == 0) return ;

    print_btree(r->left,l+1);

    for(i=0;i<l;i++)    printf("  ");

    printf("%c\n",r->info);

    print_btree(r->right,l+1);

}  

void PreOrder(struct tree *T)

{

 if(T)

  {

   printf("%c",T->info);  //访问结点

   PreOrder(T->left);   //遍历左子树

   PreOrder(T->right);   //遍历右子树

  }

}

void InOrder(struct tree *T)

{if(T)

  {

   InOrder(T->left);   //遍历左子树

   printf("%c",T->info); //访问结点

   InOrder(T->right);   //遍历右子树

  }

}

void PostOrder(struct tree *T)

{

 if(T)

  {

   PostOrder(T->left); //遍历左子树

   PostOrder(T->right); //访问结点

   printf("%c",T->info); //遍历右子树

  }

}

更多相关推荐:
二叉树的应用

二叉树的应用一实验目的1使学生熟练掌握二叉树的逻辑结构和存储结构2熟练掌握二叉树的各种遍历算法3熟悉二叉树的应用二实验内容本次实验提供2个题目学生可以根据自己的情况任选一个题目一二叉树的应用问题描述建立一棵二叉...

二叉树的遍历和应用

内蒙古科技大学本科生课程设计说明书题目数据结构课程设计二叉树的遍历和应用学生姓名学号专业班级指导教师20xx年5月29日内蒙古科技大学课程设计说明书内蒙古科技大学课程设计任务书I内蒙古科技大学课程设计说明书目录...

二叉树的基本操作及其应用

广西工学院计算机学院数据结构课程实验报告书实验六二叉树的基本操作及其应用学生姓名学号班级指导老师专业计算机学院软件学院提交日期20xx年6月22日1实验目的1了解二叉树的特点掌握二叉树的主要存储结构2掌握二叉树...

树和二叉树的应用

数据结构实验报告实验题目树和二叉树的应用实验内容重言式判别实验目的掌握树和二叉树的概念及工作原理运用其原理及概念完成上述实验题中的内容实验要求为了使学生更好的掌握与理解课堂上老师所讲的概念与原理实验前每个学生要...

二叉树的应用实验报告

实验报告课程名称数据结构上机实验实验项目二叉树的应用实验仪器PC机系别专业班级学号学生姓名实验日期成绩指导教师实验三二叉树的应用1实验目的掌握二叉树的链式存储结构和常用算法利用哈夫曼树设计最优压缩编码2实验内容...

二叉树的基本操作与应用,完整版

includequotstdiohquotincludequotstdlibhquotincludequotstringhquotincludequotmathhquottypedefcharTElemType...

二叉树应用

includequotstdiohquotincludequotmallochquotdefinemaxsize20规定树中结点的最大数目includequotwindowshquottypedefstruct...

二叉树的高度

StatusListDeleteSqSqListampLintiElemTypeampeifilt1igtLlengthreturnERRORpampLelemi1epqLelemLlength1forppltqpp1pLleng...

LAB06 二叉树的操作及应用

算法与数据结构实验报告Lab06二叉树的操作及应用实验目的和要求1掌握二叉树顺序存储表示的实现及其基本操作2掌握线索二叉树类型的定义方法会按对称序线索化二叉树和周游对称序线索二叉树3掌握优先队列的实现及其基本操...

《数据结构》实验提示_实验5_二叉树的基本操作和应用

数据结构实验提示实验五二叉树的基本操作和应用1先定义宏再定义元素二叉树的顺序表等的类型并声明顺序表的基本操作示例如下includequotstdafxhquotincludequotstdlibhquotinc...

实验3二叉树的建立及其应用

实验3二叉树的建立及其应用实验目的1熟悉二叉树的存储结构2通过先序序列创建二叉树掌握二叉树的水平输出算法3完成对二叉树进行深度和叶子数目统计的算法4完成对二叉树的中序遍历输出算法实验环境1硬件每个学生需配备计算...

求二叉树的宽度

编写算法求二叉树的宽度求最大宽度可采用层次遍历的方法记下各层节点数取其最大宽度intwidthBiTreebt求二叉树bt的最大宽度ifbtnullreturn0BiTreeQ元素为二叉树节点指针的队列fron...

二叉树的应用(24篇)