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

ops/2024/12/23 2:59:01/

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.ppmy.cn/ops/144205.html

相关文章

go 聊天系统项目-5 客户端发消息

一、前言 敬告:本文不讲解代码&#xff0c;只是把代码展示出来。 该代码之前的代码见 go 聊天系统项目-1 go聊天系统项目-2 redis 验证用户id和密码 go聊天系统项目-3 redis注册用户 go聊天项目4-显示用户列表 注意&#xff1a;本文使用 go mod 管理代码。详情见 go 包相关知识…

linux中docker命令大全

基本命令 docker pull 拉取镜像 docker pull docker push 推送镜像到DockerRegistry docker push docker images 查看本地镜像 docker images docker rmi 删除本地镜像 docker rmi docker run 创建并运行容器&#xff08;不能重复创建&#xff09; docker run d…

一个开源的自托管虚拟浏览器项目,支持在安全、私密的环境中使用浏览器

大家好&#xff0c;今天给大家分享一个开源的自托管虚拟浏览器项目Neko&#xff0c;旨在利用 WebRTC 技术在 Docker 容器中运行虚拟浏览器&#xff0c;为用户提供安全、私密且多功能的浏览体验。 项目介绍 Neko利用 WebRTC 技术在 Docker 容器中运行虚拟浏览器&#xff0c;提供…

设计模式——原型模式

设计模式——原型模式 目录 设计模式——原型模式介绍实现总结 介绍 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它通过复制现有的实例来创建新的对象&#xff0c;而不是通过 new 操作符来创建对象。原型模式的核心思想是通过“复制”…

浔川AI翻译登录失败调查报告

《浔川 AI 翻译登录失败调查报告》 一、调查背景 近期收到部分用户反馈&#xff0c;在使用浔川 AI 翻译时出现登录失败的问题&#xff0c;为了及时解决该问题并提升用户体验&#xff0c;特展开此次调查。 二、调查范围与方法 本次调查涵盖了不同操作系统、网络环境以及设备类型…

Linux驱动开发应用层 2 点亮一个LED

目录 先来聊聊sysfs sysfs的具备的优势 LED在哪里&#xff1f; 先来聊聊sysfs 我们下面首先简单聊一下sysfs。他很重要的原因是因为我们跟底下的设备打交道&#xff0c;就是可以透过我们的sysfs来操作我们底层的设备&#xff0c; sysfs是Linux内核中的一个虚拟文件系统&…

贪心算法 greedy

文章目录 参考贪心算法[Leetcode455 分发饼干](https://leetcode.cn/problems/assign-cookies/description/)分析题解 [Leetcode135 分发糖果](https://leetcode.cn/problems/assign-cookies/description/)分析题解 leetcode435无重叠区间分析题解 参考 https://github.com/ch…

QT打包【非单个exe】

项目运行点击release 找到生成的.exe文件 复制.exe文件到一个新文件夹下 找到QT cmd文件打开 到文件所在盘 命令&#xff1a;F&#xff1a; 到.exe的文件夹路径下 cd F:\...\demo 【你的exe文件所在文件夹】 输入 windeployqt name.exe&#xff0c;name是可执行文件的名称 等…