最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

树和二叉树实验报告

来源:动视网 责编:小OO 时间:2025-10-02 19:19:04
文档

树和二叉树实验报告

树和二叉树一、实验目的1.掌握二叉树的结构特征,以及各种存储结构的特点及适用范围。2.掌握用指针类型描述、访问和处理二叉树的运算。二、实验要求1.认真阅读和掌握本实验的程序。2.上机运行本程序。3.保存和打印出程序的运行结果,并结合程序进行分析。4.按照二叉树的操作需要,重新改写主程序并运行,打印出文件清单和运行结果。三、实验内容1.输入字符序列,建立二叉链表。2.按先序、中序和后序遍历二叉树(递归算法)。3.按某种形式输出整棵二叉树。4.求二叉树的高度。5.求二叉树的叶节点个数。6.交换二叉
推荐度:
导读树和二叉树一、实验目的1.掌握二叉树的结构特征,以及各种存储结构的特点及适用范围。2.掌握用指针类型描述、访问和处理二叉树的运算。二、实验要求1.认真阅读和掌握本实验的程序。2.上机运行本程序。3.保存和打印出程序的运行结果,并结合程序进行分析。4.按照二叉树的操作需要,重新改写主程序并运行,打印出文件清单和运行结果。三、实验内容1.输入字符序列,建立二叉链表。2.按先序、中序和后序遍历二叉树(递归算法)。3.按某种形式输出整棵二叉树。4.求二叉树的高度。5.求二叉树的叶节点个数。6.交换二叉
  树 和 二 叉 树

                                           

一、实验目的

1.掌握二叉树的结构特征,以及各种存储结构的特点及适用范围。

2.掌握用指针类型描述、访问和处理二叉树的运算。

二、实验要求

1.认真阅读和掌握本实验的程序。

2.上机运行本程序。

3.保存和打印出程序的运行结果,并结合程序进行分析。

4.按照二叉树的操作需要,重新改写主程序并运行,打印出文件清单和运行结果。

三、实验内容

1.输入字符序列,建立二叉链表。

2.按先序、中序和后序遍历二叉树(递归算法)。

3.按某种形式输出整棵二叉树。

4.求二叉树的高度。

5.求二叉树的叶节点个数。

6.交换二叉树的左右子树。

7.借助队列实现二叉树的层次遍历。

8.在主函数中设计一个简单的菜单,分别调试上述算法。

为了实现对二叉树的有关操作,首先要在计算机中建立所需的二叉树。建立二叉树有各种不同的方法。一种方法是利用二叉树的性质5来建立二叉树,输入数据时要将节点的序号(按满二叉树编号)和数据同时给出:(序号,数据元素0)。另一种方法是主教材中介绍的方法,这是一个递归方法,与先序遍历有点相似。数据的组织是先序的顺序,但是另有特点,当某结点的某孩子为空时以字符“#”来充当,也要输入。若当前数据不为“#”,则申请一个结点存入当前数据。递归调用建立函数,建立当前结点的左右子树。

四、解题思路

1、先序遍历:访问根结点,先序遍历左子树,先序遍历右子树

2、中序遍历:中序遍历左子树,访问根结点,中序遍历右子树

3、后序遍历:后序遍历左子树,后序遍历右子树,访问根结点

4、层次遍历算法:采用一个队列q,先将二叉树根结点入队列,然后退队列,输出该结点;若它有左子树,便将左子树根结点入队列;若它有右子树,便将右子树根结点入队列,直到队列空为止。因为队列的特点是先进后出,所以能够达到按层次遍历二叉树的目的。

五、程序清单

#include

#include

#define M 100

t定义二叉树结点值的类型为字符型

t树结点结构

{  

}BiTNode,*BiTree;

BiTree que[M];

int front=0,rear=0;

//函数原型声明

BiTNode *creat_bt1();

BiTNode *creat_bt2();

void preorder(BiTNode *p);

void inorder(BiTNode *p);

void postorder(BiTNode *p);

void enqueue(BiTree);

BiTree delqueue( );

void levorder(BiTree);

int treedepth(BiTree);

void prtbtree(BiTree,int);

void exchange(BiTree);

int leafcount(BiTree);

void paintleaf(BiTree);

BiTNode *t;

int count=0;

//主函数

void main()

{

 主菜单===================");

        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.计算二叉树的高度");

        printf("\\n\\n   8.计算二叉树中叶结点个数");

        printf("\\n\\n   9.交换二叉树的左右子树");

        printf("\\n\\n   10.打印二叉树");

        printf("\\n\\n   0.结束程序运行");

        printf("\\n   请输入您的选择(0,1,2,3,4,5,6,7,8,9,10)");

            case 1:t=creat_bt1( );break;                  //调用性质5建立二叉树算法

 请输入二叉树各结点值:");fflush(stdin);

            t=creat_bt2();break;                        //调用递归建立二叉树算法

 先序遍历二叉树:");

 二叉树为空!\\n");

 中序遍历二叉树:");

 二叉树为空!\\n");

 后序遍历二叉树:");

 二叉树为空!\\n");

 层次遍历二叉树:");

 二叉树为空!\\n");

 二叉树的高度为:%d",treedepth(t));

 二叉树为空!\\n");

 二叉树的叶子结点数为:%d\\n",leafcount(t));

 二叉树的叶结点为:");paintleaf(t);

 二叉树为空!\\n");

 交换二叉树的左右子树:\\n");

 二叉树为空!\\n");

 逆时针旋转90度输出的二叉树:\\n");

 二叉树为空!\\n");

            }   //switch

 再见!按回车键,返回…\\n");

//利用二叉树性质5,借助一维数组V建立二叉树

BiTNode *creat_bt1()

{ BiTNode *t,*p,*v[20];int i,j;Etype e;

/*输入结点的序号i、结点的数据e*/

printf("\\n请输入二叉树各结点的编号和对应的值(如1,a):");

scanf("%d,%c",&i,&e);

w当i为0,e为'#'时,结束循环

{

    t=p;   //序号为1的结点是根 

 序号为偶数,作为左孩子 

 序号为奇数,作为右孩子 

 请继续输入二叉树各结点的编号和对应的值:");

}

return(t);

}//creat_bt1;

//模仿先序递归遍历方法,建立二叉树

BiTNode *creat_bt2()

{

    if(e=='#')t=NULL;   //对于'#'值,不分配新结点 

 左孩子获得新指针值 

 右孩子获得新指针值

return(t);

//先序递归遍历二叉树

void preorder(BiTNode *p)

{if(p){

//中序递归遍历二叉树

void inorder(BiTNode *p)

{if(p){

} //inorder

//后序递归遍历二叉树

void postorder(BiTNode *p)

{ if(p){ postorder(p->lch);

} //postorder

void enqueue(BiTree T)

{

}

BiTree delqueue( )

{

}

v层次遍历二叉树

{

}

i计算二叉树的高度

{

}

v逆时针旋转90度输出二叉树树形

{int j;

if(bt)

{prtbtree(bt->rch,level+1);

for(j=0;j<=6*level;j++)printf(" ");

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

prtbtree(bt->lch,level+1);

}

}

void exchange(BiTree bt)  //交换二叉树左右子树

{BiTree p;

if(bt)

{p=bt->lch;bt->lch=bt->rch;bt->rch=p;

exchange(bt->lch);exchange(bt->rch);

}

}

int leafcount(BiTree bt)  //计算叶结点数

{

if(bt!=NULL)

{leafcount(bt->lch);

leafcount(bt->rch);

if((bt->lch==NULL)&&(bt->rch==NULL))

}

return(count);

}

v输出叶结点 

{if(bt!=NULL)

paintleaf(bt->rch);

}

图11.2所示二叉树的输入数据顺序应该是:abd#g###ce#h##f##。

图11.2  二叉树示意图

运行结果:

===================主菜单===================

 建立二叉树方法1

 建立二叉树方法2

 先序递归遍历二叉树

 中序递归遍历二叉树

 后序递归遍历二叉树

 层次遍历二叉树

 计算二叉树的高度

 计算二叉树中叶结点个数

 交换二叉树的左右子树

 打印二叉树

 结束程序运行

============================================

 请输入您的选择(0,1,2,3,4,5,6,7,8,9,10) 1

请输入二叉树各结点的编号和对应的值(如1,a):1,a

请继续输入二叉树各结点的编号和对应的值:2,b

请继续输入二叉树各结点的编号和对应的值:3,c

请继续输入二叉树各结点的编号和对应的值:4,d

请继续输入二叉树各结点的编号和对应的值:6,e

请继续输入二叉树各结点的编号和对应的值:7,f

请继续输入二叉树各结点的编号和对应的值:9,g

请继续输入二叉树各结点的编号和对应的值:13,h

请继续输入二叉树各结点的编号和对应的值:0,#

===================主菜单===================");

 建立二叉树方法1

 建立二叉树方法2

 先序递归遍历二叉树

 中序递归遍历二叉树

 后序递归遍历二叉树

 层次遍历二叉树

 计算二叉树的高度

 计算二叉树中叶结点个数

 交换二叉树的左右子树

 打印二叉树

 结束程序运行

============================================

 请输入您的选择(0,1,2,3,4,5,6,7,8,9,10) 3

先序遍历二叉树:a  b  d  g  c  e  h  f

===================主菜单===================");

 建立二叉树方法1

 建立二叉树方法2

 先序递归遍历二叉树

 中序递归遍历二叉树

 后序递归遍历二叉树

 层次遍历二叉树

 计算二叉树的高度

 计算二叉树中叶结点个数

 交换二叉树的左右子树

 打印二叉树

 结束程序运行

============================================

 请输入您的选择(0,1,2,3,4,5,6,7,8,9,10) 4

中序遍历二叉树:d  g  b  a  e  h  c  f 

===================主菜单===================");

 建立二叉树方法1

 建立二叉树方法2

 先序递归遍历二叉树

 中序递归遍历二叉树

 后序递归遍历二叉树

 层次遍历二叉树

 计算二叉树的高度

 计算二叉树中叶结点个数

 交换二叉树的左右子树

 打印二叉树

 结束程序运行

============================================

 请输入您的选择(0,1,2,3,4,5,6,7,8,9,10) 5

后序遍历二叉树:g  d  b  h  e  f  c  a  

===================主菜单===================");

 建立二叉树方法1

 建立二叉树方法2

 先序递归遍历二叉树

 中序递归遍历二叉树

 后序递归遍历二叉树

 层次遍历二叉树

 计算二叉树的高度

 计算二叉树中叶结点个数

 交换二叉树的左右子树

 打印二叉树

 结束程序运行

============================================

 请输入您的选择(0,1,2,3,4,5,6,7,8,9,10) 6

层次遍历二叉树: 97 98 99100101102103104

===================主菜单===================");

 建立二叉树方法1

 建立二叉树方法2

 先序递归遍历二叉树

 中序递归遍历二叉树

 后序递归遍历二叉树

 层次遍历二叉树

 计算二叉树的高度

 计算二叉树中叶结点个数

 交换二叉树的左右子树

 打印二叉树

 结束程序运行

============================================

 请输入您的选择(0,1,2,3,4,5,6,7,8,9,10) 7

二叉树的高度为:4

===================主菜单===================");

 建立二叉树方法1

 建立二叉树方法2

 先序递归遍历二叉树

 中序递归遍历二叉树

 后序递归遍历二叉树

 层次遍历二叉树

 计算二叉树的高度

 计算二叉树中叶结点个数

 交换二叉树的左右子树

 打印二叉树

 结束程序运行

============================================

 请输入您的选择(0,1,2,3,4,5,6,7,8,9,10) 8

二叉树的叶子结点数为:3

二叉树的叶结点为: g  h  f

===================主菜单===================");

 建立二叉树方法1

 建立二叉树方法2

 先序递归遍历二叉树

 中序递归遍历二叉树

 后序递归遍历二叉树

 层次遍历二叉树

 计算二叉树的高度

 计算二叉树中叶结点个数

 交换二叉树的左右子树

 打印二叉树

 结束程序运行

============================================

 请输入您的选择(0,1,2,3,4,5,6,7,8,9,10) 9

交换二叉树的左右子树:

 a

===================主菜单===================");

 建立二叉树方法1

 建立二叉树方法2

 先序递归遍历二叉树

 中序递归遍历二叉树

 后序递归遍历二叉树

 层次遍历二叉树

 计算二叉树的高度

 计算二叉树中叶结点个数

 交换二叉树的左右子树

 打印二叉树

 结束程序运行

============================================

 请输入您的选择(0,1,2,3,4,5,6,7,8,9,10) 10

逆时针旋转90度输出的二叉树:

 a

===================主菜单===================");

 建立二叉树方法1

 建立二叉树方法2

 先序递归遍历二叉树

 中序递归遍历二叉树

 后序递归遍历二叉树

 层次遍历二叉树

 计算二叉树的高度

 计算二叉树中叶结点个数

 交换二叉树的左右子树

 打印二叉树

 结束程序运行

============================================

 请输入您的选择(0,1,2,3,4,5,6,7,8,9,10) 2

请输入二叉树各结点值:abd#g###ce#h##f##

===================主菜单===================");

 建立二叉树方法1

 建立二叉树方法2

 先序递归遍历二叉树

 中序递归遍历二叉树

 后序递归遍历二叉树

 层次遍历二叉树

 计算二叉树的高度

 计算二叉树中叶结点个数

 交换二叉树的左右子树

 打印二叉树

 结束程序运行

============================================

 请输入您的选择(0,1,2,3,4,5,6,7,8,9,10) 0

请按任意键继续. . .

六、调试心得及收获

建立二叉树有两种方法:一种方法是利用二叉树的性质5来建立二叉树;另一种方法是主教材中介绍的方法,这是一个递归方法,与先序遍历有点相似。建立后,通过先序、中序、后序遍历,对二叉树有了进一步的理解与掌握。对二叉树中各种计算也更了解了!

七、其他所想到的

一个二叉树,有许多部分构成,每一个部分都需要精心编写,才能对其进行操作,不至于出错。

文档

树和二叉树实验报告

树和二叉树一、实验目的1.掌握二叉树的结构特征,以及各种存储结构的特点及适用范围。2.掌握用指针类型描述、访问和处理二叉树的运算。二、实验要求1.认真阅读和掌握本实验的程序。2.上机运行本程序。3.保存和打印出程序的运行结果,并结合程序进行分析。4.按照二叉树的操作需要,重新改写主程序并运行,打印出文件清单和运行结果。三、实验内容1.输入字符序列,建立二叉链表。2.按先序、中序和后序遍历二叉树(递归算法)。3.按某种形式输出整棵二叉树。4.求二叉树的高度。5.求二叉树的叶节点个数。6.交换二叉
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top