PAT A1066 Root of AVL Tree

  • AVL这东西记一次忘一次,每次看就像披着初恋外衣的旧情人(or reverse)
  • 以下应该是较为标准的模板方法,只是好久没有用过指针了,所以写了个静态的版本,有些地方有点别扭
#include<iostream>
#include<vector>using namespace std;struct Node{int data,left,right,height;Node(){left = -1;right = -1;height = 0;}
};
vector<Node> vn;void updateHeight(int root){int hl = vn[root].left != -1 ? vn[vn[root].left].height : -1;int hr = vn[root].right != -1 ? vn[vn[root].right].height : -1;vn[root].height = max(hl,hr) + 1;
}int rotateL(int root){int tmp = vn[root].right;vn[root].right = vn[tmp].left;vn[tmp].left = root;updateHeight(root);updateHeight(tmp);return tmp;
}int rotateR(int root){int tmp = vn[root].left;vn[root].left = vn[tmp].right;vn[tmp].right = root;updateHeight(root);updateHeight(tmp);return tmp;
}int getBalanceFactor(int root){int hl = vn[root].left != -1 ? vn[vn[root].left].height : -1;int hr = vn[root].right != -1 ? vn[vn[root].right].height : -1;return hl - hr;
}int insert(int root,int idx){if(root == -1) return idx;if(vn[idx].data < vn[root].data){vn[root].left = insert(vn[root].left,idx);updateHeight(root);if(getBalanceFactor(root) == 2){if(getBalanceFactor(vn[root].left) == 1) root = rotateR(root);else if(getBalanceFactor(vn[root].left) == -1){vn[root].left = rotateL(vn[root].left);root = rotateR(root);}}}else{vn[root].right = insert(vn[root].right,idx);updateHeight(root);if(getBalanceFactor(root) == -2){if(getBalanceFactor(vn[root].right) == -1) root = rotateL(root);else if(getBalanceFactor(vn[root].right) == 1){vn[root].right = rotateR(vn[root].right);root = rotateL(root);}}}return root;
}int main(){int N,root = -1;cin >> N;vn.resize(N);for(int i = 0;i < N;i ++){cin >> vn[i].data;root = insert(root,i);}cout << vn[root].data;return 0;
}

PAT A1066 Root of AVL Tree ——春水碧于天,画船听雨眠相关推荐

  1. PAT 1066. Root of AVL Tree (25) 回レ!雪月AVL

    1066. Root of AVL Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue An A ...

  2. PAT甲级1066 Root of AVL Tree (25分):[C++题解]建立平衡树(AVL树)

    文章目录 题目分析 题目链接 题目分析 图片来源:acwing 分析 平衡树(AVL树)是平衡二叉搜索树的简称,当然需要满足二叉搜索树的性质,左子树小于根,根小于等于右子树:然后还要满足平衡树的基本特 ...

  3. 1066 Root of AVL Tree——PAT甲级 | 参考mooc实现完整代码

    Root of AVL Tree  2013年浙江大学计算机学院免试研究生上机考试真题,是关于AVL树的基本训练. 原题链接:PTA | 程序设计类实验辅助教学平台 题目描述 AVL 树是一种自平衡的 ...

  4. pat04-树4. Root of AVL Tree (25)

    04-树4. Root of AVL Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue An A ...

  5. 【PAT A1066】Root of AVL Tree

    #include <cstdio> #include <algorithm> using namespace std;struct node {int v, height; / ...

  6. PAT1066 Root of AVL Tree (25)(AVL树)

    题意: 给出一系列要插入平衡搜索二叉树的数,要求输出最后的根节点 思路: 没其他办法,完完全全是AVL树的插入节点模拟,这题就不会写,看别人代码写的. #include<iostream> ...

  7. 1066 Root of AVL Tree 需再做

    1. 这题如果不知道平衡二叉树怎么平衡的(左旋右旋那一套)应该不可能做出吧,那就输出中位数回点血了. 2. 需要具备的基础知识:怎么将结点插入平衡二叉树. 3. 我犯的一个错误:把更新高度的函数直接返 ...

  8. 1066 Root of AVL Tree (25 分)【难 / 知识点: 平衡树 未完成】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805404939173888 平衡树之前学过,不过有忘完了,有时间补吧

  9. PAT甲级1123 Is It a Complete AVL Tree (30分):[C++题解]建立平衡树、bfs,判完全二叉树

    文章目录 题目分析 题目链接 题目分析 来源:pat网站 本题作为进阶题,它的基础知识点如下几题. PAT甲级1066 Root of AVL Tree (25分):[C++题解]建立平衡树(AVL树 ...

最新文章

  1. logrotate管理nginx日志文件
  2. Rokid发布YodaOS 并宣布代码开源
  3. 【opencv】opencv在图片、视频嵌中英文字符的方法
  4. 每秒7亿次请求,阿里新一代数据库如何支撑?
  5. addEventListener事件委托
  6. 宏锦软件 Android 的 ListView 使用详解
  7. linux设备驱动 注册 命令6,Linux设备驱动程序学习----6.模块的参数
  8. python从入门到精通需要多久-python从入门到精通需要多久?你需要先明白这两个点...
  9. jquery 判断checkbox是否为空的三种方法
  10. mct接收_BLOCK MCT红外探测器模块
  11. 值得推荐的win10动态壁纸软件
  12. 色彩空间与色彩深度。详细分析相机中sRGB/AdobeRGB、RAW/JPG到底该怎么选
  13. 月薪翻20倍,从小编辑到百度高级产品经理,我是如何打怪升级的
  14. 十分详细的React入门实例
  15. Ubuntu systemd配置文件/etc/systemd/system被删解决方案
  16. 预制菜顶流信良记,小龙虾的生意经难念
  17. Jupyter notebook 配置无问题 但就是无法远程访问,解决方法
  18. RT-Thread进阶之低功耗PM组件应用笔记
  19. org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask
  20. 最先适应法、最佳适应法、下次适配法、最差适配法

热门文章

  1. 新手选择蓝牙耳机要注意什么?双11发烧友疯狂推荐五款蓝牙耳机
  2. 初识C语言----完结篇
  3. 2017年全国大学生电子设计竞赛综合测评题目解析——Multisim仿真
  4. Python实现excel表合入
  5. RVDS4.0 破解
  6. Layui官网地址官网仓库
  7. 迭代器Iterator的用法
  8. ARM与DSP的区别
  9. Photoshop 2020 更新内容
  10. Centos7安装普罗米修斯(Prometheus)监控