当前位置: 首页 > news >正文

算法设计学习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);
	else
		printf("\n数据元素%c不在二叉树中",x);
	Destroy(&root);
	return 0;
}

http://www.dtcms.com/a/111819.html

相关文章:

  • 从零构建大语言模型全栈开发指南:第五部分:行业应用与前沿探索-5.2.3前沿方向:MoE架构、世界模型与具身智能
  • html5炫酷3D文字效果项目开发实践
  • Flink 1.20 Kafka Connector:新旧 API 深度解析与迁移指南
  • 泰博云平台solr接口存在SSRF漏洞
  • Docker安装、配置Mysql5.7
  • hackmyvm-Principle
  • Java 大视界 -- 基于 Java 的大数据机器学习模型在图像识别中的迁移学习与模型优化(173)
  • 软路由安装指南
  • MySQL体系架构
  • leetcode数组-移除元素
  • 基于RDK X3的“校史通“机器人:SLAM导航+智能交互,让校史馆活起来!
  • SpringKafka消息消费:@KafkaListener与消费组配置
  • 大模型如何优化数字人的实时交互与情感表达
  • 【小沐杂货铺】基于Three.JS绘制三维数字地球Earth(GIS 、WebGL、vue、react)
  • Oracle SQL 执行计划分析与优化指南
  • autoconf 笔记250404
  • 原始字符串字面量(Raw String Literal)
  • Qt 中 findChild和findChildren绑定自定义控件
  • leetcode-代码随想录-链表-移除链表元素
  • Docker安装、配置Nacos
  • 网络安全基础知识总结
  • RabbitMQ高级特性2
  • MINIQMT学习课程Day6
  • React项目在ts文件中使用router实现跳转
  • 搜索与图论 树的广度优先遍历 图中点的层次
  • MusicMint ,AI音乐生成工具
  • bun 版本管理工具 bum 安装与使用
  • oracle账户被锁定了应该怎么办
  • Oracle数据库数据编程SQL<7.2 推荐管理工具:DBeaver Community安装教程>
  • 2021 CCF CSP-S2.括号序列