《数据结构》实验报告
实验序号:6                  实验项目名称:树和二叉树的操作
学  号
姓  名
专业、班
实验地点
指导教师
实验时间
一、实验目的及要求
1、进一步掌握指针变量、动态变量的含义。
2、掌握二叉树的结构特征,以及各种存储结构的特点及适用范围。
3、掌握用指针类型描述、访问和处理二叉树的运算。
4、掌握用二叉树前序、中序、后序、层次遍历的方法。
二、实验设备(环境)及要求
微型计算机;
windows 操作系统;
Microsoft Visual Studio 6.0集成开发环境。
三、实验内容与步骤
1.根据P129的方法,将a*b-((c+d*e/f)+g)转化为表达式二叉树(绘图),并写出表达式二叉树的前序、中序和后序遍历顺序。
2. 链式表表示和实现二叉树如下:
#include <stdio.h>
#include <stdlib.h>
#define max 50
typedef struct liuyu
{
    int data;
    struct liuyu *lchild,*rchild;
}test;
liuyu *root,*p,*q[max];
int sum=0;
int m=sizeof(test);         
void insert_data(int x)        /*生成二叉排序树*/
{
    liuyu *p,*q,*s;
    s=(test*)malloc(m);
    s->data=x;
    s->lchild=NULL;
    s->rchild=NULL;
    if(!root)
    {
        root=s;
    }
    p=root;         
    while(p)                /*如何接入二叉排序树的适当位置*/
    {
        q=p;
二叉树中序遍历非递归算法        if(p->data==x)
        {
            printf("data already exist! \n");
            return;
        }
        else if(x<p->data)
            p=p->lchild; 
        else
            p=p->rchild;
    }
    if(x<q->data)
        q->lchild=s;
    else
        q->rchild=s;
}
void main()            /*先生成二叉排序树*/
{
    int i,x;
    i=1;
    root=NULL;            /*千万别忘了赋初值给root!*/
    do
    {
        printf("please input data%d:",i);
        i++;
        scanf("%d",&x);          /*从键盘采集数据,以-9999表示输入结束*/
        if(x==-9999){
            printf("\nNow output data value:\n");
        }
        else
            insert_data(x);    /*调用插入数据元素的函数*/
    }       
    while(x!=-9999);       
}
改写以上程序,实现功能如下(任选3):
1).编写函数实现前序、中序和后序遍历。
2).编写函数实现计算叶节点个数。
3). 编写函数实现层序遍历。
4).编写函数实现求二叉树的深度
5). 编写函数实现中序非递归遍历(利用栈)
四、分析与讨论
对上机实践结果进行分析,上机的心得体会。
五、教师评语
签名:
日期:
成绩
附源程序清单:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。