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

PAT-Root of AVL Tree (25)

题目来源

Root of AVL Tree (25)

题目描述点击链接自行查看

思路简介

就是一道平衡树的模板题
后续我会在另一篇文章中补上平衡树手推的过程

遇到的问题

代码

/** * https://www.nowcoder.com/pat/5/problem/4117 * 平衡树 */#include<bits/stdc++.h>usingnamespacestd;structNode{Node*left,*right;intkey;intheight;//结点的高度Node(int&k):key(k),left(nullptr),right(nullptr),height(1){}};intheight(Node*u){//获取结点的高度return(u?u->height:0);}voidupdateHeight(Node*u){//更新结点的高度if(!u)return;u->height=1+max(height(u->left),height(u->right));}intgetBalanceFactor(Node*u){//获取平衡因子,空结点因子为0return(u?height(u->left)-height(u->right):0);}Node*rotateRight(Node*y){Node*x=y->left;Node*T2=x->right;// 旋转x->right=y;y->left=T2;// 更新高度updateHeight(y);updateHeight(x);returnx;}Node*rotateLeft(Node*x){Node*y=x->right;Node*T2=y->left;// 旋转y->left=x;x->right=T2;// 更新高度updateHeight(x);updateHeight(y);returny;}// 平衡节点Node*balance(Node*node){if(!node)returnnullptr;// 更新高度updateHeight(node);// 检查平衡因子intbf=getBalanceFactor(node);// 左子树过重if(bf>1){// 左-右情况:先左旋左子树if(getBalanceFactor(node->left)<0){node->left=rotateLeft(node->left);}// 左-左情况:右旋returnrotateRight(node);}// 右子树过重if(bf<-1){// 右-左情况:先右旋右子树if(getBalanceFactor(node->right)>0){node->right=rotateRight(node->right);}// 右-右情况:左旋returnrotateLeft(node);}returnnode;}// 插入节点Node*insert(Node*node,int&key){if(!node){returnnewNode(key);}if(key<node->key){node->left=insert(node->left,key);}elseif(key>node->key){node->right=insert(node->right,key);}else{// 不允许重复插入returnnode;}// 平衡当前节点returnbalance(node);}voidsolve(){intn;cin>>n;Node*root=nullptr;for(inti=0;i<n;++i){intk;cin>>k;root=insert(root,k);}cout<<root->key;}intmain(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);//fstream in("in.txt",ios::in);cin.rdbuf(in.rdbuf());intT=1;//cin>>T;while(T--){solve();}return0;}
http://www.cnnetsun.cn/news/1425813.html

相关文章:

  • 微铣削刀具磨损损伤检测数据集VOC+YOLO格式82张2类别
  • STK传感器配置实战:从卫星视野建模到雷达系统集成(附避坑指南)
  • 【Arduino】L298P驱动循迹小车:从硬件搭建到智能调参全攻略
  • [2015] [Gorila DQN] [Massively Parallel Methods for Deep Reinforcement Learning]
  • R语言保姆级教程:用ggplot2绘制PCA/PCoA/NMDS降维图(附完整代码)
  • 云雀播放器 2026.3.6 | 高颜值音乐播放器 动画非常流畅 全球超1亿用户
  • 探索numpy库:从基础到高级操作的详细指南
  • 多任务处理原理揭秘:为什么你的电脑能同时运行微信和Chrome?
  • 2026最新!10个降AIGC平台全场景通用测评,哪款最能帮你降AI率?
  • 别再只盯着参数了!聊聊数据中心交换机选型时,CLOS、Crossbar这些硬件架构到底该怎么看?
  • JavaWeb ——HttpServletRequest 请求对象(附代码)
  • 3DTiles白膜性能优化指南:如何让SHP建筑模型在Cesium中流畅加载
  • STLink维修避坑指南:为什么你的固件刷写总失败?从写保护解除到芯片选型详解
  • Spring AI对话记忆存储选型指南:MySQL vs Redis性能对比实测
  • OpenClaw 的模型推理成本优化方面,是否使用了投机解码或级联推理架构?
  • 数值分析实战:Newton-Cotes公式在Python中的实现与误差分析
  • 1Panel:现代化开源Linux服务器运维管理面板
  • 毕业设计救星:手把手教你用KF-GINS搞定GNSS/INS松组合导航(附代码详解)
  • 我们如何使用Recast/Detour做寻路 ——你的角色是怎么从A点走到B点的,而没有一头撞进墙里
  • 论文降AI后怎么检查专业术语有没有被改?逐项检查清单分享
  • AI从“动嘴”到“动手”:2026年,一只“小龙虾”如何重塑硅基生命的数字生存方式
  • Supervisor配置文件里environment变量怎么填?一个变量多个路径的实战写法
  • Comsol声子晶体能带计算,包含六角晶格不同原胞的选取以及简约布里渊区高对称点选择
  • 太原理工大学软件架构实战 -- JavaEE核心技术深度解析
  • Windows/Linux环境变量设置全指南:从基础操作到高级技巧
  • vue+python城市供水管网爆管预警系统
  • 探索2024新算法:CPO-VMD基于冠豪猪优化算法优化VMD分解
  • 汇川H3U 10 轴项目实战:电池自动上料机的奇妙之旅
  • 绘图丑拒!复刻顶刊官方配色
  • 54321