算法设计学习8

实验目的及要求:
通过深入学习树(Tree)和二叉树(Binary Tree)这两种重要的数据结构,掌握它们的基本概念、性质和操作,提高对树形结构的理解和应用能力。通过本实验,学生将深化对树和二叉树等数据结构的理解,提高编程能力和问题解决能力,为进一步学习复杂数据结构和算法打下基础。

实验设备环境:
1.微型计算机
2.DEV C++(或其他编译软件)

任务:
编写程序,建立如图 8-10(b) 所示的带头结点的二叉链存储结构二叉树,首先打印该二叉树,然后分别输出按照前序遍历、中序遍历和后序遍历方法访问各结点的信息,最后,查找字符'E是否在该二叉树中。
[输出显示函数设计] 按照某种遍历方法输出二叉树各结点的信息,其实就是把上述各遍历二叉树函数中的 Visit0 设计成输出结点信息的函数。Visit0 设计如下:

void Visit(DataType item){
printf("%c",item);
}


[设计]
设二叉树的结点定义以及带头结点二叉树的初始化操作、左结点插入操作、右结点插入操作、左子树删除操作、右子树删除操作的实现函数存放在文件 BiTree.h 中,设二叉树遍历操作和撤销操作的实现函数存放在文件 BiTreeTraverse.h 中。

代码如下:

头文件BiTree:#include<stdio.h>
#include<stdlib.h>
typedef char DataType;
typedef struct Node {DataType data;struct Node *leftChild;struct Node *rightChild;
} BiTreeNode;
void Initiate(BiTreeNode **root) {*root = (BiTreeNode*)malloc(sizeof(BiTreeNode));(*root)->leftChild = NULL;(*root)->rightChild = NULL;
}
BiTreeNode *InsertLeftNode(BiTreeNode *curr,DataType x) {BiTreeNode *s, *t;if(curr == NULL)return NULL;t = curr->leftChild;s = (BiTreeNode*)malloc(sizeof(BiTreeNode));s->data = x;s->leftChild = t;s->rightChild = NULL;curr->leftChild = s;return curr->leftChild;
}
BiTreeNode *InsertRightNode(BiTreeNode *curr,DataType x) {BiTreeNode *s, *t;if(curr == NULL)return NULL;t = curr->rightChild;s = (BiTreeNode*)malloc(sizeof(BiTreeNode));s->data = x;s->rightChild = t;s->leftChild = NULL;curr->rightChild = s;return curr->rightChild;
}
void Destroy(BiTreeNode **root) {if((*root) != NULL && (*root)->leftChild != NULL)Destroy(&(*root)->leftChild);if((*root) != NULL && (*root)->rightChild != NULL)Destroy(&(*root)->rightChild);free(*root);
}头文件BiTreeTraverse:#include"BiTree.h"
void Visit(DataType item) {printf("%c ",item);
}
void PrintBiTree(BiTreeNode *root, int n) {int i;if(root == NULL)return;PrintBiTree(root->rightChild,n + 1);for(i = 0; i < n-1 ; i++)printf(" ");if(n>0) {printf("---");printf("%c\n",root->data);}PrintBiTree(root->leftChild,n + 1);
}
BiTreeNode *Search(BiTreeNode *root,DataType x) {BiTreeNode *find=NULL;if(root!=NULL) {if(root->data==x)find=root;else {find=Search(root->leftChild,x);if(find==NULL)find=Search(root->rightChild,x);}}return find;
}
void PreOrder(BiTreeNode *t,void Visit(DataType item)) {if(t != NULL) {Visit(t->data);PreOrder(t->leftChild, Visit);PreOrder(t->rightChild, Visit);}
}
void InOrder(BiTreeNode *t,void Visit(DataType item)) {if(t != NULL) {InOrder(t->leftChild, Visit);Visit(t->data);InOrder(t->rightChild, Visit);}
}
void PostOrder(BiTreeNode *t,void Visit(DataType item)) {if(t != NULL) {PostOrder(t->leftChild, Visit);PostOrder(t->rightChild, Visit);Visit(t->data);}
}8-2:#include"BiTreeTraverse.h"
int main() {BiTreeNode *root,*p,*find;char x='E';Initiate(&root);p=InsertLeftNode(root,'A');p=InsertLeftNode(p,'B');p=InsertLeftNode(p,'D');p=InsertRightNode(p,'G');p=InsertRightNode(root->leftChild,'C');InsertLeftNode(p,'E');InsertRightNode(p,'F');PrintBiTree(root,0);printf("前序遍历:");PreOrder(root->leftChild,Visit);printf("\n中序遍历:");InOrder(root->leftChild,Visit);printf("\n后序遍历:");PostOrder(root->leftChild,Visit);find=Search(root,x);if(find!=NULL)printf("\n数据元素%c在二叉树中",x);elseprintf("\n数据元素%c不在二叉树中",x);Destroy(&root);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P17_ResNeXt-50

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、模型结构 ResNeXt-50由多个残差块&#xff08;Residual Block&#xff09;组成&#xff0c;每个残差块包含三个卷积层。以下是模型的主要结构&#xff1…

【YOLO系列(V5-V12)通用数据集-剪刀石头布手势检测数据集】

YOLO格式的剪刀石头布手势检测数据集&#xff0c;适用于YOLOv5-v11所有版本&#xff0c;可以用于本科毕设、发paper、做课设等等&#xff0c;有需要的在这里获取&#xff1a; 【YOLO系列&#xff08;V5-V12&#xff09;通用数据集-剪刀石头布手势检测数据集】 数据集专栏地址&a…

基于连接池与重试机制的高效TDengine写入方案

摘要 在时序数据库应用场景中,如何构建稳定高效的写入机制是核心挑战。本文基于提供的Python代码实现,解析一种结合连接池管理、智能重试策略和事务控制的TDengine写入方案,并分析其技术优势与优化方向。 一、代码 from dbutils.pooled_db import PooledDB import timede…

抖音热点视频识别与分片处理机制解析

抖音作为日活数亿的短视频平台,其热点视频识别和分片处理机制是支撑高并发访问的核心技术。以下是抖音热点视频识别与分片的实现方案: 热点视频识别机制 1. 实时行为监控系统 用户行为聚合:监控点赞、评论、分享、完播率等指标的异常增长曲线内容特征分析:通过AI识别视频…

基于RDK X3的“校史通“机器人:SLAM导航+智能交互,让校史馆活起来!

视频标题&#xff1a; 【校史馆の新晋顶流】RDK X3机器人&#xff1a;导览员看了直呼内卷 视频文案&#xff1a; 跑得贼稳团队用RDK X3整了个大活——给校史馆造了个"社牛"机器人&#xff01; 基于RDK X3开发板实现智能导航与语音交互SLAM技术让机器人自主避障不…

Metal学习笔记十三:阴影

在本章中&#xff0c;您将了解阴影。阴影表示表面上没有光。当另一个表面或对象使对象与光线相遮挡时&#xff0c;您会看到对象上的阴影。在项目中添加阴影可使您的场景看起来更逼真&#xff0c;并提供深度感。 阴影贴图 阴影贴图是包含场景阴影信息的纹理。当光线照射到物体…

Matplotlib:数据可视化的艺术与科学

引言&#xff1a;让数据开口说话 在数据分析与机器学习领域&#xff0c;可视化是理解数据的重要桥梁。Matplotlib 作为 Python 最流行的绘图库&#xff0c;提供了从简单折线图到复杂 3D 图表的完整解决方案。本文将通过实际案例&#xff0c;带您从基础绘图到高级定制全面掌握 …

Python数据可视化-第4章-图表样式的美化

环境 开发工具 VSCode库的版本 numpy1.26.4 matplotlib3.10.1 ipympl0.9.7教材 本书为《Python数据可视化》一书的配套内容&#xff0c;本章为第4章 图表样式的美化 本章主要介绍了图表样式的美化&#xff0c;包括图表样式概述、使用颜色、选择线型、添加数据标记、设置字体…

嵌入式海思Hi3861连接华为物联网平台操作方法

1.1 实验目的 快速演示 1、认识轻量级HarmonyOS——LiteOS-M 2、初步掌握华为云物联网平台的使用 3、快速驱动海思Hi3861 WIFI芯片,连接互联网并登录物联网平台

如何在Redis容量限制下保持热点数据

如何在Redis容量限制下保持热点数据 当数据库有100万条数据但Redis只能保存10万条时,需要智能的策略来确保Redis中存储的都是最常访问的热点数据。以下是几种有效的解决方案: 一、内存淘汰策略 Redis提供了多种内存淘汰机制,当内存不足时会自动删除部分数据: 策略命令/配…

cv2.fillPoly()和cv2.polylines()

参数解释 cv2.fillPoly() 和 cv2.polylines() 都是 OpenCV 的函数。功能是绘制多边形&#xff0c;cv2.fillPoly()可绘制实心多边形&#xff0c; cv2.polylines() 可绘制空心多边形 cv2.fillPoly()用途&#xff1a;提取ROI 可在黑色图像上&#xff0c;填充白色&#xff0c;作为…

数据库--SQL

SQL&#xff1a;Structured Query Language&#xff0c;结构化查询语言 SQL是用于管理关系型数据库并对其中的数据进行一系列操作&#xff08;包括数据插入、查询、修改删除&#xff09;的一种语言 分类&#xff1a;数据定义语言DDL、数据操纵语言DML、数据控制语言DCL、事务处…

【python】速通笔记

Python学习路径 - 从零基础到入门 环境搭建 安装Python Windows: 从官网下载安装包 https://www.python.org/downloads/Mac/Linux: 通常已预装&#xff0c;可通过终端输入python3 --version检查 配置开发环境 推荐使用VS Code或PyCharm作为代码编辑器安装Python扩展插件创建第…

批量删除git本地分支和远程分支命令

1、按照关键词开头匹配删除远程分支 git branch -r | grep "origin/feature/develop-1"| sed s/origin\///g | xargs -n 1 git push origin --delete git branch -r 列出所有远端分支。 grep "origin/feature/develop-1" 模糊匹配分支名称包含"orig…

上市电子制造企业如何实现合规的质量文件管理?

浙江洁美电子科技股份有限公司成立于2001年&#xff0c;是一家专业为片式电子元器件(被动元件、分立器件、集成电路及LED)配套生产电子薄型载带、上下胶带、离型膜、流延膜等产品的国家高新技术企业&#xff0c;主要产品有分切纸带、打孔经带、压孔纸带、上下胶带、塑料载带及其…

leetcode数组-有序数组的平方

题目 题目链接&#xff1a;https://leetcode.cn/problems/squares-of-a-sorted-array/ 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff…

基于微信小程序的医院挂号预约系统设计与实现

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本微信小程序医院挂号预约系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大…

密码学基础——DES算法

前面的密码学基础——密码学文章中介绍了密码学相关的概念&#xff0c;其中简要地对称密码体制(也叫单钥密码体制、秘密密钥体制&#xff09;进行了解释&#xff0c;我们可以知道单钥体制的加密密钥和解密密钥相同&#xff0c;单钥密码分为流密码和分组密码。 流密码&#xff0…

Redis分布式锁详解

Redis分布式锁详解 分布式锁是在分布式系统中实现互斥访问共享资源的重要机制。Redis因其高性能和原子性操作特性&#xff0c;常被用来实现分布式锁。 一、基础实现方案 1. SETNX EXPIRE方案&#xff08;基本版&#xff09; # 加锁 SETNX lock_key unique_value # 设置唯…

创建Linux虚拟环境并远程连接,finalshell自定义壁纸

安装VMware 这里不多赘述。 挂载Linux系统 1). 打开Vmware虚拟机&#xff0c;打开 编辑 -> 虚拟网络编辑器(N) 选择 NAT模式&#xff0c;然后选择右下角的 更改设置。 设置子网IP为 192.168.100.0&#xff0c;然后选择 应用 -> 确定。 解压 CentOS7-1.zip 到一个比较大…