数据结构实验报告,二叉树的基本操作(C语言)


作者:命运之光
专栏:数据结构


目录

  • 数据结构实验报告,二叉树的基本操作(C语言)
    • 实验六 二叉树的基本操作
      • 一、需求分析
      • 二、概要设计
      • 三、详细设计
      • 四、调试分析
      • 五、测试结果
      • 附录:源程序代码(带注释)


实验六 二叉树的基本操作
实验环境:Visual C++或Dev C++
实验目的:
1、掌握二叉树创建;
2、掌握二叉树的遍历及常用算法。
实验内容:
通过完全前序序列创建一棵二叉树,完成如下功能:
1)输出二叉树的前序遍历序列;
2)输出二叉树的中序遍历序列;
3)输出二叉树的后序遍历序列;
4)统计二叉树的结点总数;
5)统计二叉树中叶子结点的个数;


实验六 二叉树的基本操作


一、需求分析

通过完全前序序列创建一棵二叉树,完成如下功能:
1)创建二叉树;
2)输出二叉树的前序遍历序列;
3)输出二叉树的中序遍历序列;
4)输出二叉树的后序遍历序列;
5)统计二叉树的结点总数;
6)统计二叉树中叶子结点的个数;


二、概要设计

1.用结构体定义一个二叉树

//定义二叉树(二叉链式)
typedef struct BTnode {char data;struct BTnode* lchild;struct BTnode* rchild;
}BTnode, * BiTree;

其中用字符型来定义数据data
用lchild来定义左子树
用rchild来定义右子树

2.主程序

switch (x) {case 1:printf("输入二叉树结点的值:\n");T = creatT();break;case 2://先序遍历printf("先序遍历二叉树:n");TraverseBiTree(T);break;case 3://中序遍历printf("中序遍历二叉树:n");InOrderBiTree(T);break;case 4://后序遍历printf("后序遍历二叉树:n");PostOrderBiTree(T);break;case 5:printf("二叉树的结点总数为:%d\n", count(T));break;case 6://叶子结点数Leafcount(T, &num);printf("n树的叶子结点个数为:%d", num);break;default:exit(0);}

用switch函数来调用自定义中的所有函数来实现函数的调用。


三、详细设计

1)定义二叉树

//定义二叉树(二叉链式)
typedef struct BTnode{char data;struct BTnode *lchild;struct BTnode *rchild;
}BTnode,*BiTree;
BiTree T;

2)创建二叉树

//创建二叉树
BiTree creatT(){BTnode *T; char ch;scanf("%c",&ch);if(ch=='#')  T=NULL;else{T=(BTnode*)malloc(sizeof(BTnode));T->data=ch;T->lchild=creatT();T->rchild=creatT(); }return T;
}

3)先序遍历

void TraverseBiTree(BiTree T) {//先序遍历
//  BTnode *T; if (T == NULL)return;else {printf("%c", T->data);TraverseBiTree(T->lchild);TraverseBiTree(T->rchild);}
}

4)中序遍历

//中序遍历
void InOrderBiTree(BiTree T) {if (NULL == T)return;else {InOrderBiTree(T->lchild);printf("%c", T->data);InOrderBiTree(T->rchild);}
}

5)后续遍历

//后序遍历
void PostOrderBiTree(BiTree T) {if (NULL == T)return;else {//中序遍历InOrderBiTree(T->lchild);InOrderBiTree(T->rchild);printf("%c", T->data);}
}

6)统计二叉树结点的个数

int count(BiTree T){int num,left,right;if(T==NULL) num=0;else{left=count(T->lchild);right=count(T->rchild);num=left+right+1;}return num;
}

7)统计二叉树叶子结点个数

Leafcount(BiTree T, int num) {if (T){if (T->lchild == NULL && T->rchild == NULL){num++;printf("%c", T->data);}Leafcount(T->lchild, num);Leafcount(T->rchild, num);}//return num;
}

8)菜单

void menu(){BiTree T; printf("*****************************************\n");printf("1:创建二叉树;\n");printf("2:先序遍历二叉树;\n");printf("3:中序遍历二叉树;\n");printf("4:后序遍历二叉树;\n");printf("5:统计二叉树结点个数;\n");printf("6:统计二叉树叶子结点个数;\n");printf("0:退出!\n");printf("*****************************************\n");
}

9)主函数

int main(){int x;BiTree T; menu();scanf("%d",&x);getchar();while(x){   switch(x){case 1:printf("输入二叉树结点的值:\n");T=creatT();break;case 2://先序遍历printf("先序遍历二叉树:n");TraverseBiTree(T);break;case 3://中序遍历printf("中序遍历二叉树:n");InOrderBiTree(T);break;case 4://后序遍历printf("后序遍历二叉树:n");PostOrderBiTree(T);break;case 5:printf("二叉树的结点总数为:%d\n",count(T));break;case 6://叶子结点数count(T);Leafcount(T,num);printf("n树的叶子结点个数为:%d", num);break;default:exit(0);}getchar();printf("\n请选择要进行的操作:\n");menu();scanf("%d",&x);}printf("________________________________________");printf("\n\n");
}

四、调试分析

简单分析:
相比起之前的实验,要实现二叉树先需要定义出一个结构体,通过对左右子树的查找来实现先序中序以及后续遍历的结果,经行了简单的函数封装调用以及传参,通过switch来实现按钮操作,中途注意逻辑合理不要产生逻辑错误否则可能会导致输出结果的错误。
经验和体会:
通过对二叉树的建立我更加的理解了二叉树再程序中的一个执行步骤,先序中序后序遍历之间的不同,对与函数的调用以及传参的运用有了更加深刻的理解。体会到二叉树算法在实际的查找中的便利。


五、测试结果

调试测试数据:1、输入二叉树的结点建立二叉树;2、先序便利二叉树;3、中序遍历二叉树;4、后序遍历二叉树;5、统计二叉树结点个数;6、统计二叉树叶子结点个数;
数据测试如下截图:
输入:ab##c##
(1)输入二叉树的结点建立二叉树;

(2)先序便利二叉树;

(3)中序遍历二叉树;

(4)后序遍历二叉树;

(5)统计二叉树结点个数;

(6)统计二叉树叶子结点个数;


附录:源程序代码(带注释)

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int num=0;
//定义二叉树(二叉链式)
typedef struct BTnode{char data;struct BTnode *lchild;struct BTnode *rchild;
}BTnode,*BiTree;
BiTree T;
//创建二叉树
BiTree creatT(){BTnode *T; char ch;scanf("%c",&ch);if(ch=='#')  T=NULL;else{T=(BTnode*)malloc(sizeof(BTnode));T->data=ch;T->lchild=creatT();T->rchild=creatT(); }return T;
}
void TraverseBiTree(BiTree T) {//先序遍历
//  BTnode *T; if (T == NULL)return;else {printf("%c", T->data);TraverseBiTree(T->lchild);TraverseBiTree(T->rchild);}
}
//中序遍历
void InOrderBiTree(BiTree T) {if (NULL == T)return;else {InOrderBiTree(T->lchild);printf("%c", T->data);InOrderBiTree(T->rchild);}
}
//后序遍历
void PostOrderBiTree(BiTree T) {if (NULL == T)return;else {//中序遍历InOrderBiTree(T->lchild);InOrderBiTree(T->rchild);printf("%c", T->data);}
}
//统计二叉树结点的个数
int count(BiTree T){int num,left,right;if(T==NULL) num=0;else{left=count(T->lchild);right=count(T->rchild);num=left+right+1;}return num;
}
//结点数
Leafcount(BiTree T, int num) {if (T){if (T->lchild == NULL && T->rchild == NULL){num++;printf("%c", T->data);}Leafcount(T->lchild, num);Leafcount(T->rchild, num);}//return num;
}
//菜单
void menu(){BiTree T; printf("*****************************************\n");printf("1:创建二叉树;\n");printf("2:先序遍历二叉树;\n");printf("3:中序遍历二叉树;\n");printf("4:后序遍历二叉树;\n");printf("5:统计二叉树结点个数;\n");printf("6:统计二叉树叶子结点个数;\n");printf("0:退出!\n");printf("*****************************************\n");
}
//主函数
int main(){int x;BiTree T; menu();scanf("%d",&x);getchar();while(x){   switch(x){case 1:printf("输入二叉树结点的值:\n");T=creatT();break;case 2://先序遍历printf("先序遍历二叉树:n");TraverseBiTree(T);break;case 3://中序遍历printf("中序遍历二叉树:n");InOrderBiTree(T);break;case 4://后序遍历printf("后序遍历二叉树:n");PostOrderBiTree(T);break;case 5:printf("二叉树的结点总数为:%d\n",count(T));break;case 6://叶子结点数count(T);Leafcount(T,num);printf("n树的叶子结点个数为:%d", num);break;default:exit(0);}getchar();printf("\n请选择要进行的操作:\n");menu();scanf("%d",&x);}printf("________________________________________");printf("\n\n");
}

适用于:
大一数据结构实验课实验报告——二叉树的练习(C语言版)

数据结构实验报告,二叉树的基本操作(C语言)相关推荐

  1. 数据结构实验报告-二叉树的存储结构的实现与应用

    实验目的 熟悉二叉树结点的结构和对二叉树的基本操作. 掌握对二叉树每一种操作的具体实现. 学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法. 在二叉树基本操作的基础上掌握二叉树的应用. 实验 ...

  2. c语言数据结构二叉树实验报告,数据结构实验三二叉树实验报告.doc

    数据结构实验三二叉树实验报告 数据结构实验报告 实验名称: 实验三--二叉树 学生姓名: XX 班 级: 班内序号: 学 号: 日 期: 1.实验要求 1.1实验目的 通过选择下面两个题目之一进行实现 ...

  3. 厦门理工C语言实验报告8,厦门理工c语言数据结构实验

    <厦门理工c语言数据结构实验>由会员分享,可在线阅读,更多相关<厦门理工c语言数据结构实验(15页珍藏版)>请在人人文库网上搜索. 1.数据结构实验报告 实验序号:6 实验项目 ...

  4. C语言南邮数据结构实验报告2,南邮数据结构实验报告.docx

    南邮数据结构实验报告 实验报告 课程名称 实验名称数据结构二叉树基本操作以及哈夫曼编码译码系统 实验时间 指导单位指导教师年月日 学生姓名 学院(系) 班级学号专业 二叉树的基本运算: 一.问题描述 ...

  5. C语言数据结构线性表上机实验报告,数据结构实验报告实验一线性表_图文

    数据结构实验报告实验一线性表_图文 更新时间:2017/2/11 1:23:00  浏览量:763  手机版 数据结构实验报告 实验名称: 实验一 线性表 学生姓名: 班 级: 班内序号: 学 号: ...

  6. 图的遍历c语言数据结构实验报告,数据结构实验报告--图的遍历

    江 西 理 工 大 学 数据结构 实验报告 实验名称 图的遍历 日期 2014-12-01 专业班级 计算机(中加)131班 地点 信息学院621 实验人 王鹏伟 学号 同组人 单独完成 152013 ...

  7. 桂电七院数据结构实验报告一

    顺序表的基本操作 实验内容与步骤 实现顺序表上的插入.删除等操作.调试程序并对相应的输出作出分析:修改输入数据,预期输出并验证输出的结果.加深对有关算法的理解. 步骤: 第一步:定义顺序表的存储结构. ...

  8. 北京理工大学计算机实验四报告表,北京理工大学数据结构实验报告实验四

    北京理工大学数据结构实验报告实验四 (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 <数据结构与算法设计>实验报告--实 ...

  9. 数据结构实验报告(一)

    数据结构实验报告(一) 一.实验名称 实验一  线性表的基本操作实现及其应用 二.实验目的 1.熟练掌握线性表的结构特点,掌握顺序表的基本操作. 2.巩固 C++相关的程序设计方法与技术. 3.学会使 ...

最新文章

  1. 查看MySQL句柄_mysql查询语句-handler
  2. 分支界限法0 1背包 c语言,分支限界法之布线问题(1)
  3. Redis面试 - redis 的雪崩和穿透?
  4. java代码实现画板_求好心人帮找或做个JAVA画板程序 代码,主要能实现简单的画板功能!...
  5. galera cluster数据备份
  6. 【OpenCV入门指南】第六篇 轮廓检测 下
  7. [转移]今天做了的一些事
  8. 树莓派4B安装windows xp windows 95( windows xp windows 95 for raspberry pi 4B)
  9. Visio如何绘制数据流图
  10. wireshark提示未启动npf服务The NPF driver isn’t running You may have trouble capturing or listing interfaces
  11. 致老友-有时候我词不达意 但我真的很开心生活有你
  12. android 输入法如何启动流程_Android程序打开和关闭输入法
  13. MySQL(三) 完整性约束
  14. 在WORD中批量修改图片大小
  15. 记一次Linux服务器 误删数据的恢复操作
  16. IDEA输入字母间距变大报红处理方法
  17. JS - 13 - 模块化
  18. 方差、标准差和协方差三者之间的定义与计算
  19. 操作系统概述及各类操作系统特点
  20. CentOS 7代理设置(Yum/cURL/Wget/Docker)

热门文章

  1. VMware 搭建大数据测试平台(CDH6.2.1)
  2. 如何测试服务器性能?
  3. aes在tomcat解密中文乱码,在控制台解密中文不是乱码
  4. BCB操作EXCEL
  5. FTP文件传输协议详解
  6. 租用国内的云主机的话,阿里云和盛大云,哪个更好?
  7. 《The Forward-Forward Algorithm: Some Preliminary Investigations》
  8. git 客户端 所有客户端 钩子_git自定义项目钩子和全局钩子
  9. 2023最新软件工程毕业设计题目汇总
  10. Linux 交换分区