当前位置: 首页 > 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.jsqmd.com/news/519733/

相关文章:

  • IMU噪声参数实战:用MATLAB手把手教你Allan方差分析(附完整代码)
  • Terminal Single Sign-on
  • 英文论文降AI用什么工具?Turnitin检测实测推荐
  • JWT 为什么总能被伪造?从 Burp Labs 看签名验证、Header 注入与算法混淆
  • 在Java中如何验证环境是否配置成功
  • java毕业设计基于springboot迅捷外卖配送系统_7cstns62
  • 2026年毕业论文AI率超30%?研究生亲测5款知网降AI工具后只推荐这个
  • Java静态方法与静态变量的定义与使用
  • 微铣削刀具磨损损伤检测数据集VOC+YOLO格式82张2类别
  • PyTorch GPU加速实战:如何用TORCH_CUDA_ARCH_LIST榨干你的显卡性能(附常见GPU架构查询表)
  • 手把手教你用ABAP2XLSX解析前端上传的Excel文件流(含完整代码)
  • 不只是添加:手把手教你用Python脚本+本地工具,打造个人微信表情包管理流水线
  • Java里集合框架包含哪些核心接口
  • 2026年学霸同款 8个AI论文工具:本科生毕业论文写作与格式规范全测评
  • (全网最全)分享8款AI工具,快速降低论文AIGC率!
  • MicroROS WiFi通信实战:如何用UDP协议实现ROS2节点无线调试(含避坑指南)
  • 在Java中如何处理长数字读写
  • 10款主流论文降ai工具推荐(2026年免费降AI工具推荐,含免费降ai率版)
  • 看完就会:AI论文平台,千笔写作工具 VS 灵感风暴AI,毕业论文全流程更省心!
  • 安培环路定理实战指南:从无限大平面到圆柱导体的5种经典模型拆解
  • 如何在Linux系统中安装Java
  • 【架构心法】撕碎“0与1”的完美幻觉:顶级嵌入式软件架构师的物理学防线与硬件分析底牌
  • React15 - React CSS Modules BEM命名实践
  • 在Java里Comparable接口解决了什么问题
  • 没有独立显卡也能玩转OmniParser?Win10无GPU环境搭建实测与避坑指南
  • 【架构心法】撕碎“永不宕机”的傲慢:顶级控制系统的绝对底线,论“快速失效(Fail-Fast)”的物理级慈悲
  • Ubuntu安装后必做第一步:手把手教你换清华/阿里源,让apt-get飞起来
  • FileZilla+FTP服务器搭建:如何安全共享文件给远程团队(含权限配置详解)
  • 【2026年最新600套毕设项目分享】springboot林业资源管理系统(14223)
  • 别再复制粘贴了!Qt6 QML自定义控件从开发到发布,保姆级避坑指南(含插件制作)