第十六周做题总结_数据结构_AVL与哈希查找

id:157 A. DS二叉平衡树构建

题目描述

在初始为空的平衡二叉树中依次插入n个结点,请输出最终的平衡二叉树。

要求实现平衡二叉树,不可以使用各类库函数。
AVL代码参考模板:

#include <iostream>
using namespace std;#define LH 1 // 左高 
#define EH 0 // 等高 
#define RH -1 // 右高 class BiNode
{public:int key; // 关键值int bf; // 平衡因子 BiNode *lChild, *rChild;BiNode(int kValue, int bValue){key = kValue;bf = bValue;lChild = NULL;rChild = NULL;}~BiNode(){key = 0;bf = 0;lChild = NULL;rChild = NULL;}
};// 二叉排序树
class BST
{private:BiNode *root; // 根结点指针 void rRotate(BiNode *&p);void lRotate(BiNode *&p);void leftBalance(BiNode *&t);void rightBalance(BiNode *&t);int insertAVL(BiNode *&t, int key, bool &taller); // 插入元素并做平衡处理void inOrder(BiNode *p);public:BST();void insertAVL(int key); // 二叉排序树插入元素 ~BST();void inOrder(); // 中序遍历 
};// 以p为根的二叉排序树作右旋处理 
void BST::rRotate(BiNode *&p)
{// 参考课本236页算法9.9
}// 以p为根的二叉排序树作左旋处理 
void BST::lRotate(BiNode *&p)
{// 参考课本236页算法9.10
}// t为根的二叉排序树作左平衡旋转处理
void BST::leftBalance(BiNode *&t)
{// 参考课本238页算法9.12
}// t为根的二叉排序树作右平衡旋转处理
void BST::rightBalance(BiNode *&t)
{// 参考课本238页算法9.12
}int BST::insertAVL(BiNode *&t, int key, bool &taller)
{// 参考课本237页算法9.11
}void BST::inOrder(BiNode *p)
{if(p){inOrder(p->lChild);cout << p->key << ':' << p->bf << ' ';inOrder(p->rChild);}return;
}// 二叉排序树初始化
BST::BST()
{root = NULL;
}BST::~BST()
{root = NULL;
}// 插入元素并作平衡处理
void BST::insertAVL(int key)
{bool taller = false;insertAVL(root, key, taller);
}// 中序遍历
void BST::inOrder()
{inOrder(root);
}int main(void)
{int t;cin >> t;while(t --){// 构建二叉平衡树,并在插入元素时做平衡处理 int n, elem;cin >> n;BST tree;while(n --){cin >> elem;tree.insertAVL(elem);}tree.inOrder();cout << endl;}return 0;
} 

输入

第一行输入测试数据组数t;
每组测试数据,第一行输入结点数n, 第二行输入n个结点值。

输出

对每组测试数据,按中序遍历的顺序输出树中,结点值及平衡因子(测试数据没有空树),即结点值:平衡因子,不同结点之间间隔一个空格。

输入样例1

8
3
64 5 1
3
64 5 13
6
64 78 5 1 13 15
6
64 78 5 1 13 10
3
64 78 100
3
64 80 70
6
64 30 80 90 70 68
6
64 30 80 90 70 75

输出样例1

1:0 5:0 64:0
5:0 13:0 64:0
1:0 5:1 13:0 15:0 64:0 78:0
1:0 5:0 10:0 13:0 64:-1 78:0
64:0 78:0 100:0
64:0 70:0 80:0
30:0 64:0 68:0 70:0 80:-1 90:0
30:0 64:1 70:0 75:0 80:0 90:0

代码实现

#include <iostream>
using namespace std;#define LH 1 // 左高
#define EH 0 // 等高
#define RH -1 // 右高class BiNode
{
public:int key; // 关键值int bf; // 平衡因子 BiNode* lChild, * rChild;BiNode(int kValue, int bValue);~BiNode();
};BiNode::BiNode(int kValue, int bValue)
{key = kValue;bf = bValue;lChild = NULL;rChild = NULL;
}BiNode::~BiNode()
{key = 0;bf = 0;lChild = NULL;rChild = NULL;
}// 二叉排序树
class BST
{
private:int n; // 结点个数BiNode* root; // 根结点指针 void rRotate(BiNode*& p);void lRotate(BiNode*& p);void leftBalance(BiNode*& t);void rightBalance(BiNode*& t);int insertAVL(BiNode*& t, int key, bool& taller); // 插入元素并做平衡处理void inOrder(BiNode* p, int& n);
public:BST(int n1);void insertAVL(int key); // 二叉排序树插入元素 ~BST();void inOrder(); // 中序遍历 
};// 以p为根的二叉排序树作右旋处理(LL
void BST::rRotate(BiNode*& p)
{BiNode* k = p->lChild;p->lChild = k->rChild;k->rChild = p;p = k;
}// 以p为根的二叉排序树作左旋处理(RR
void BST::lRotate(BiNode*& p)
{BiNode* k = p->rChild;p->rChild = k->lChild;k->lChild = p;p = k;
}// t为根的二叉排序树作左平衡旋转处理
void BST::leftBalance(BiNode*& t)
{BiNode* lc;lc 

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

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

相关文章

Rust操作符和符号全解析

Rust是一种系统编程语言&#xff0c;它的语法丰富而严谨&#xff0c;包括了一系列的操作符和符号。这些操作符和符号是构建Rust程序的基本元素&#xff0c;它们用于执行各种操作&#xff0c;如算术运算、逻辑比较、类型约束等。本文将详细介绍Rust中的操作符和符号&#xff0c;…

【Mybatis】MyBatis 探秘:#{} 与 ${} 参传差异解码,数据库连接池筑牢数据交互根基

前言 &#x1f31f;&#x1f31f;本期讲解关于Spring IOC&DI的详细介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么…

解锁 draw.io 流程图制作工具的强大功能与应用(1/2)

一、draw.io 简介 &#xff08;一&#xff09;基本概述 draw.io 是一款由 JGraph 公司开发的基于网页的在线图表绘制工具。它最大的优势之一就是无需进行繁琐的下载和安装步骤&#xff0c;只要打开浏览器&#xff0c;访问其官网&#xff0c;就能立即开始使用。无论是在 Window…

ai论文写作免费平台:五款AI论文写作辅助工具的对比与分析

随着人工智能技术的飞速发展&#xff0c;越来越多的AI工具应运而生&#xff0c;为学术写作带来了前所未有的便利。本文将对千笔AI论文、笔灵AI论文、Smodin、以及Notion AI等五款AI论文写作辅助工具进行全面的对比与分析&#xff0c;以帮助用户更好地了解这些工具的优势和特点&…

三、基于langchain使用Qwen搭建金融RAG问答机器人--检索增强生成

经过前面2节数据准备后&#xff0c;现在来构建检索 加载向量数据库 from langchain.vectorstores import Chroma from langchain_huggingface import HuggingFaceEmbeddings import os# 定义 Embeddings embeddings HuggingFaceEmbeddings(model_name"m3e-base")#…

数据仓库工具箱—读书笔记02(Kimball维度建模技术概述02、事实表技术基础)

Kimball维度建模技术概述 记录一下读《数据仓库工具箱》时的思考&#xff0c;摘录一些书中关于维度建模比较重要的思想与大家分享&#x1f923;&#x1f923;&#x1f923; 第二章前言部分作者提到&#xff1a;技术的介绍应该通过涵盖各种行业的熟悉的用例展开&#xff08;赞同…

fabric.js

目录 一、在canvas上画简单的图形 二、在canvas上用路径(Path)画不规则图形 三、在canvas上插入图片并设置旋转属性(angle) 四、让元素动起来(animate) 五、图像过滤器(filters)让图片多姿多彩 六、颜色模式(Color)和相互转换(toRgb、toHex) 七、对图形的渐变填充(Gradi…

Liinux下VMware Workstation Pro的安装,建议安装最新版本17.61

建议安装最新版本17.61&#xff0c;否则可能有兼容性问题 下载VMware Workstation安装软件 从官网网站下载 https://support.broadcom.com/group/ecx/productdownloads?subfamilyVMwareWorkstationPro 选择所需版本 现在最新版本是17.61&#xff0c;否则可能有兼容性问题…

压力测试Jmeter简介

前提条件&#xff1a;要安装JDK 若不需要了解&#xff0c;请直接定位到左侧目录的安装环节。 1.引言 在现代软件开发中&#xff0c;性能和稳定性是衡量系统质量的重要指标。为了确保应用程序在高负载情况下仍能正常运行&#xff0c;压力测试变得尤为重要。Apache JMeter 是一…

Android-ImagesPickers 拍照崩溃优化

Android-ImagesPickers 作为老牌图片选择器&#xff0c;帮助了很多牛马宝宝&#xff0c;刚好最近用到了多相册选择以及拍照&#xff0c;可能是高版本机型问题&#xff0c;导致拍照后就闪退 原作者文章以及git Android实用视图动画及工具系列之九&#xff1a;漂亮的图片选择器…

前端的知识(部分)

11 前端的编写步骤 第一步:在HTML的页面中声明方法 第二步:在<script>中定义一个函数,其中声明一个data来为需要的数据 赋值一个初始值 第三步:编写这个方法实现对应的功能

LSTM详解

1. LSTM设计 LSTM(长短期记忆网络)详解 长短期记忆网络(LSTM, Long Short-Term Memory) 是一种特殊的循环神经网络(RNN),特别适合处理和预测序列数据中的长时间依赖关系。LSTM 通过引入“门机制”(如输入门、遗忘门、输出门)来解决标准 RNN 在长时间序列任务中梯度消…

我在广州学 Mysql 系列之 数据类型和运算符详解

ℹ️大家好&#xff0c;我是&#x1f606;练小杰&#xff0c;今天主要学习 Mysql的数据类型以及运算符操作~~ 上周五学习了“Mysql 系列之 数据“表”的基本操作”~ 想要了解更多&#x1f236;️MYSQL 数据库的命令行总结&#xff01;&#xff01;&#xff01; “我是你的敌人,…

SQL Server 表值函数使用场景有哪些

表值函数&#xff08;Table-Valued Functions, TVFs&#xff09;在 SQL Server 中非常有用&#xff0c;适用于多种场景。以下是常见的使用场景&#xff1a; 1. 数据提取和转换 • 数据过滤&#xff1a;根据特定条件从表中提取数据。 • 数据聚合&#xff1a;对数据进行聚…

git中 抓取和拉取有什么区别

在 Git 中&#xff0c;抓取&#xff08;fetch&#xff09;和拉取&#xff08;pull&#xff09;都是从远程仓库获取数据的操作&#xff0c;但它们的行为有关键区别&#xff1a; 1. git fetch&#xff08;抓取&#xff09; 作用&#xff1a; 从远程仓库获取最新的更改&#xff0…

《量子计算对人工智能发展的深远影响》

在科技发展的浪潮中&#xff0c;量子计算与人工智能无疑是两颗璀璨的明星&#xff0c;二者的融合正引领着一场深刻的科技变革. 量子计算的独特之处在于其利用量子比特的叠加和纠缠特性&#xff0c;能够实现并行计算&#xff0c;从而在处理复杂问题时展现出超越传统计算的巨大潜…

python 配置 oracle instant client

1.问题描述 想用python连接oracle数据库&#xff0c;百度得知需要cx_Oracle这个第三方库 import cx_Oracle# 设置Oracle数据源名称 dsn cx_Oracle.makedsn(host, port, service_nameservice_name)# 创建数据库连接 connection cx_Oracle.connect(userusername, passwordpas…

使用FastGPT制做一个AI网站日志分析器

越来越的多网站面临每天上千次的扫描和各类攻击&#xff0c;及时发现攻击IP&#xff0c;并有效的屏蔽不良访问成为网站安全的重要保障&#xff0c;这里我们使用AI来完成对网站日志的日常分析。 我们来使用FastGPT来制做一个AI网站日志析器&#xff0c;下面就开始&#xff1a; …

RabbitMQ中的Work Queues模式

在现代分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信和解耦系统的关键组件之一。RabbitMQ 是一个广泛使用的开源消息代理软件&#xff0c;支持多种消息传递模式。其中&#xff0c;Work Queues&#xff08;工作队列&#xff09;模式是一…

LeetCode hot100-81

https://leetcode.cn/problems/climbing-stairs/description/?envTypestudy-plan-v2&envIdtop-100-liked 70. 爬楼梯 已解答 简单 相关标签 相关企业 提示 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&…