【数据结构】宜宾大学-计院-实验七

实验七 二叉树

  • 一、实验目的:
  • 二、实验内容:
  • 三、实验结果:
    • 1,2;
    • 3,4,5;
      • 6.
      • 数组顺序存储的优缺点
      • 二叉链表存储的优缺点

一、实验目的:

掌握二叉树的顺序存储结构
掌握二叉树的链式存储结构

二、实验内容:

在这里插入图片描述

1.实现用数组形式存储二叉树。
2.把上面这棵树输入到数组里存储,测试。
存储方案:
用数组顺序存储二叉树,树上的元素存放位置在数组中是固定的,如果树的i位置(从0开始按层编号)有元素,就放在数组的i号位置,没有元素,数组对应的位置就空着(为了便于观察,这里放 ‘#’ )。i的左右子树的编号分别为2i+1和2i+2

在这里插入图片描述

3.实现二叉树的二叉链表存储
4.实现用先序,中序,后序中的任何一种输出二叉树结点
5.把上面这棵树作为输入数据,测试程序的正确性
6. 比较数组顺序存储和二叉链表存储的优缺点。
存储方案:
链表存储二叉树通常用具有两个指针域的链表作为二叉树的存储结构,每一个结点由数据域Data, 左指针域lchild和右指针域rchild组成,最后还需要一个指针指向根结点。
存储结构
typedef struct BiTNode
{
elem data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

三、实验结果:

每个同学都要记录实验结果(无论对与错),如果程序调试中有什么错误,记录并分析原因,必须另寻时间调试成功。
实验报告:(及时撰写实验报告)

1,2;

在这里插入图片描述

运行截图:
在这里插入图片描述

代码实现:

#include<iostream>
#include<stdlib.h>
#define N 11 //N = 2*n + 1(n为节点个数)
using namespace std;

typedef char type;

//定于节点结构
typedef struct BiTNode
{
	type data;
	struct BiTNode* lchild, * rchild;
}BiTNode, *BiTree;

//开辟节点
BiTree BuyNode(type x)
{
	BiTree T = new BiTNode;
	//BiTree T = (BiTree)malloc(sizeof(BiTNode));
	T->data = x;
	T->lchild = nullptr;
	T->rchild = nullptr;
	return T;
}

//手创建一个二叉树
BiTree CreateBiT1()
{
	BiTree node1 = BuyNode('1');
	BiTree node2 = BuyNode('2');
	BiTree node3 = BuyNode('3');
	BiTree node4 = BuyNode('4');
	BiTree node5 = BuyNode('5');
	node1->rchild = node2;
	node2->rchild = node3;
	node3->rchild = node4;
	node4->rchild = node5;

	return node1;
}
//将创建的二叉树按照要求存储在数组中并输出
void PreOrder(BiTree T, char arr[], int& i)
{
	if (T == nullptr)
	{
		arr[i++] = '#';
		return;
	}
	arr[i++] = T->data;
	PreOrder(T->lchild, arr, i);
	PreOrder(T->rchild, arr, i);
}

int  main()
{
	char arr[N];
	int i = 0;
	BiTree T = CreateBiT1();
	PreOrder(T, arr, i);

	for (int i = 0; i < N; i++)
	{
		cout << arr[i] << " ";
	}
	return 0;
}

3,4,5;

按照要求输入如下二叉树:(为空处需要输入 ‘#’ 来结束递归)
在这里插入图片描述

运行截图:
在这里插入图片描述
代码实现:

#include<iostream>
#include<stdlib.h>
#define N 11 //N = 2*n + 1(n为节点个数)
using namespace std;

typedef char type;

//定于节点结构
typedef struct BiTNode
{
	type data;
	struct BiTNode* lchild, * rchild;
}BiTNode, *BiTree;

//开辟节点
BiTree BuyNode(type x)
{
	BiTree T = new BiTNode;
	//BiTree T = (BiTree)malloc(sizeof(BiTNode));
	T->data = x;
	T->lchild = nullptr;
	T->rchild = nullptr;
	return T;
}

//递归创建二叉树,需要按照要求输入创建
void CreateBiT2(BiTree& T)
{
	char x;
	cin >> x;
	if (x == '#')
		return;
	T = new BiTNode;
	if (T == nullptr) return;
	T->data = x;
	T->lchild = nullptr;
	T->rchild = nullptr;
	CreateBiT2(T->lchild);
	CreateBiT2(T->rchild);
}

//先序遍历
void PreOrder1(BiTree T)
{
	if (T == nullptr)
		return;
	cout << T->data << " ";
	PreOrder1(T->lchild);
	PreOrder1(T->rchild);
}

//中序遍历
void InOrder1(BiTree T)
{
	if (T == nullptr)
		return;
	InOrder1(T->lchild);
	cout << T->data << " ";
	InOrder1(T->rchild);
}

//后序遍历
void PosOrder1(BiTree T)
{
	if (T == nullptr)
		return;
	PosOrder1(T->lchild);
	PosOrder1(T->rchild);
	cout << T->data << " ";
}
int main()
{
	BiTree T;
	cout << "需要按照先序遍历输入数据来创建二插树,每个NULL节点输入'#'代替" << endl;
	CreateBiT2(T);
	cout << "按照先序遍历输出二叉树" << endl;
	PreOrder1(T);
	cout << endl << "按照中序遍历输出二叉树" << endl;
	InOrder1(T);
	cout << endl << "按照后序遍历输出二叉树" << endl;
	PosOrder1(T);
	return 0;
 }

6.

数组顺序存储的优缺点

‌优点‌:

‌存储密度大‌:数组顺序存储的结构使得存储空间利用率高,因为每个元素都紧密地存储在一起,没有额外的空间用于表示元素之间的关系‌
‌随机访问速度快‌:通过下标可以直接访问数组中的任何元素,这使得查找速度非常快‌。
‌实现简单‌:大多数高级编程语言都支持数组,因此实现起来相对简单‌

‌缺点‌:

‌插入和删除操作效率低‌:在数组中插入或删除元素时,需要移动大量元素,这会导致效率低下‌。
‌空间预分配问题‌:数组需要预先分配固定大小的存储空间,如果分配过大,会导致空间浪费;如果分配过小,会导致溢出‌

二叉链表存储的优缺点

‌优点:‌

‌插入和删除操作方便‌:二叉链表通过指针连接节点,插入和删除操作只需要修改指针,不需要移动大量元素,因此效率较高‌。
‌动态分配空间‌:二叉链表的存储空间是动态分配的,不需要预先分配固定大小的存储空间,可以根据需要动态地增加或减少存储空间‌。
‌缺点:‌

‌存储密度小‌:二叉链表中的每个节点除了存储数据外,还需要存储指向子节点的指针,这降低了存储密度‌。
‌随机访问效率低‌:二叉链表不支持随机访问,需要通过遍历找到目标节点,这会导致查找效率较低‌。

C++

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

游戏如何应对内存修改

据观察&#xff0c;近年来游戏黑灰产攻击角度多样化趋势显著&#xff0c;主要面临工作室、定制注入挂、模拟点击挂、内存修改挂、破解版等多方面安全问题。 据FairGuard数据统计&#xff0c;在游戏面临的众多安全风险中&#xff0c;「内存修改」攻击占比约为13%&#xff0c;主…

git重置的四种类型(Git Reset)

git区域概念 1.工作区:IDEA中红色显示文件为工作区中的文件 (还未使用git add命令加入暂存区) 2.暂存区:IDEA中绿色(本次还未提交的新增的文件显示为绿色)或者蓝色(本次修改的之前版本提交的文件但本次还未提交的文件显示为蓝色)显示的文件为暂存区中的文件&#xff08;使用了…

Clickhouse集群新建用户、授权以及remote权限问题

新建用户 create user if not exists user on cluster 集群名称 IDENTIFIED WITH plaintext_password BY 密码;给用户授查询、建表、删表的权限 GRANT create table,select,drop table ON 数据库实例.* TO user on cluster 集群名称 ;再其他节点下用户建本地表成功&#…

Exploring Defeasible Reasoning in Large Language Models: A Chain-of-Thought A

文章目录 题目摘要简介准备工作数据集生成方法实验结论 题目 探索大型语言模型中的可废止推理&#xff1a;思路链 论文地址&#xff1a;http://collegepublications.co.uk/downloads/LNGAI00004.pdf#page136 摘要 许多大型语言模型 (LLM) 经过大量高质量数据语料库的训练&…

应用程序部署(IIS的相关使用,sql server的相关使用)

数据服务程序&#xff08;API&#xff09;部署 1、修改配置文件 打开部署包中的web.config配置文件&#xff0c;确认数据库登录名和密码正确 修改ip为电脑IP&#xff08;winR输入cmd&#xff0c;输入ipconfig&#xff0c;IPv4对应的就是本机IP&#xff09; 2、打开IIS&#x…

RHCE-DNS域名解析服务器

一、DNS简介 DNS &#xff08; Domain Name System &#xff09;是互联网上的一项服务&#xff0c;它作为将域名和 IP 地址相互映射的一个分布式 数据库&#xff0c;能够使人更方便的访问互联网。 DNS 系统使用的是网络的查询&#xff0c;那么自然需要有监听的 port 。 DNS 使…

插入排序(sort)C++

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 时间限制&#xff1a;C/C/Rust/Pascal 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C/Rust/Pascal 512 M&#xff0c;其他语言1024 M 64bit IO Format: %lld 题目描述 插入排序是一种…

Vue2:脚手架 vue-cli

Vue2&#xff1a;脚手架 vue-cli 结构renderrefpropsmixinscoped 脚手架是Vue官方提供的Vue开发平台&#xff0c;.vue文件就需要通过脚手架来解析&#xff0c;所以对于单文件组件就依赖于脚手架。 安装&#xff1a; npm i -g vue/cli如果执行vue --version有输出&#xff0c;…

【MYSQL】主从复制机制(图解)

一、什么是主从复制 主从复制是一种通过binlog&#xff08;二进制日志&#xff09;进行操作的一直复制机制&#xff0c;它会有一个主数据库&#xff0c;还会有一个从数据库&#xff0c;根据binlog就可以把主数据库中的信息复制到从数据库之中。这个主从复制的好处就是如果在并发…

SpringCloud Gateway网关路由配置 接口统一 登录验证 权限校验 路由属性

介绍 Spring Cloud Gateway 根据请求的路径、HTTP 方法、头部等信息&#xff0c;将请求路由到对应的微服务实例。它支持基于动态路由规则的配置&#xff0c;可以根据请求的 URL、查询参数、请求头等条件&#xff0c;灵活地决定将请求转发到哪个微服务。Spring Cloud Gateway 提…

Java学习Day60:回家!(ElasticStatic)

1.what is ElasticStatic The Elastic Stack, 包括 Elasticsearch、 Kibana、 Beats 和 Logstash&#xff08;也称为 ELK Stack&#xff09;。能够安全可靠地获取任何来源、任何格式的数据&#xff0c;然后实时地对数据进行搜索、分析和可视化。 Elaticsearch&#xff0c;简称…

《进制转换:数字世界的奇妙变身术》

思维导图 一、什么是进制转换 在当今数字化飞速发展的时代&#xff0c;数字如同构建整个数字宇宙的基本粒子&#xff0c;无处不在且发挥着至关重要的作用。而在这个数字的魔法世界里&#xff0c;进制就像是不同的语言规则&#xff0c;每种进制都有着独特的构建方式和逻辑。 我…

Unity3D高级编程

1、标签(Tag)和图层(Layer) 他们都用于游戏物体分类&#xff0c;但是侧重点不一样。 标签便于代码中对特定物体进行操作。 图层则服务于渲染和碰撞管理&#xff0c;如控制摄像机渲染、光源影响及碰撞设置。 标签和图层的位置&#xff1a; &#xff08;1&#xff09;标签Tag…

Jmeter基础篇(22)服务器性能监测工具Nmon的使用

一、前言 我们在日常做压测的过程中&#xff0c;不仅仅需要监控TPS&#xff0c;响应时间&#xff0c;报错率等这些系统基础性能数据&#xff0c;还需要对服务器的性能&#xff08;如CPU、磁盘、内存、网络IO等&#xff09;做监控&#xff0c;以求对系统运行过程中的硬件性能有…

IDEA最新最全设置教程(包括常用的插件)

一、目的 统一安装一些必要的插件,方便大家开发。统一代码格式、注释格式、统一字符集编码。新加入的同事可以快速适应和熟悉,不需要在讲解IDEA配置问题。二、IDEA要修改的设置 新项目设置和设置 1. Java编译版本 这里请使用自己的JDK 2. 统一IDEA字符集 统一使用UTF-8 无…

日本IT工作好找吗?

在日本做IT是否好找工作&#xff0c;实际上取决于多个因素&#xff0c;包括个人的技术能力、日语水平、工作经验以及市场需求等。以下是对这一问题的详细分析&#xff1a; 技术能力与日语水平 技术能力&#xff1a;IT行业是一个技术密集型行业&#xff0c;技术能力自然是求职…

多端校园圈子论坛小程序,多个学校同时代理,校园小程序分展示后台管理源码

社团活动与组织 信息发布&#xff1a;系统支持社团发布活动信息、招募新成员等&#xff0c;方便社团进行线上线下活动的组织和管理。 增强凝聚力&#xff1a;通过系统&#xff0c;社团成员可以更好地交流和互动&#xff0c;增强社团的凝聚力和影响力。 生活服务功能 二手市场…

用 Python 从零开始创建神经网络(六):优化(Optimization)介绍

优化&#xff08;Optimization&#xff09;介绍 引言 引言 在随机初始化的模型中&#xff0c;或者即使是采用更复杂方法初始化的模型中&#xff0c;我们的目标是随着时间的推移培训或教育一个模型。为了训练一个模型&#xff0c;我们调整权重和偏差以提高模型的准确性和置信度…

架构篇(04理解架构的演进)

目录 学习前言 一、架构演进 1. 初始阶段的网站架构 2. 应用服务和数据服务分离 3. 使用缓存改善网站性能 4. 使用应用服务器集群改善网站的并发处理能力 5. 数据库读写分离 6. 使用反向代理和CDN加上网站相应 7. 使用分布式文件系统和分布式数据库系统 8. 使用NoSQL和…

Linux软件包管理与Vim编辑器使用指南

目录 一、Linux软件包管理器yum 1.什么是软件包&#xff1f; 2.什么是软件包管理器&#xff1f; 3.查看软件包 4.安装软件 ​编辑 5.卸载软件 Linux开发工具&#xff1a; 二、Linux编辑器---vim 1.vim的基本概念 (1) 正常/普通模式&#xff08;Normal mode&#xff0…