PAT1066 Root of AVL Tree (25)(AVL树)
题意:
给出一系列要插入平衡搜索二叉树的数,要求输出最后的根节点
思路:
没其他办法,完完全全是AVL树的插入节点模拟,这题就不会写,看别人代码写的。
#include<iostream>
#include<algorithm>
using namespace std;struct node {int key;struct node *left, *right;
};node *rotateLeft(node *root) { //左单旋转node *t = root->right; root->right = t->left;t->left = root;return t;
}
node *rotateRight(node *root) { //右单旋转node *t = root->left;root->left = t->right;t->right = root;return t;
}
int getHeight(node *root) {if (root == nullptr)return 0;return max(getHeight(root->left), getHeight(root->right)) + 1;
}
node *rotateLR(node *root) { //LR平衡旋转root->left = rotateLeft(root->left);return rotateRight(root);
}
node *rotateRL(node *root) { //RL平衡旋转root->right = rotateRight(root->right);return rotateLeft(root);
}
node *insert(node *root, int key) {if (root == nullptr) {root = new node();root->key = key;root->left = nullptr;root->right = nullptr;} else if (key < root->key) {root->left = insert(root->left, key);//递归插入并平衡if (getHeight(root->left) - getHeight(root->right) == 2) {if (key < root->left->key) { //在根节点的左孩子的左子树上插入root = rotateRight(root);} else { //在根节点的左孩子的右子树上插入root = rotateLR(root); }}} else {root->right = insert(root->right, key);if (getHeight(root->right) - getHeight(root->left) == 2) {if (key > root->right->key) { //在根节点的右孩子的右子树上插入root = rotateLeft(root);} else { //在根节点的右孩子的左子树上插入root = rotateRL(root);}}}return root;
}int main() {int n, key;scanf("%d", &n);node *root = nullptr;for (int i = 0; i < n; i++) {scanf("%d", &key);root = insert(root, key);}printf("%d", root->key);return 0;
}
转载于:https://www.cnblogs.com/seasonal/p/10343620.html
PAT1066 Root of AVL Tree (25)(AVL树)相关推荐
- PAT甲级1066 Root of AVL Tree (25分):[C++题解]建立平衡树(AVL树)
文章目录 题目分析 题目链接 题目分析 图片来源:acwing 分析 平衡树(AVL树)是平衡二叉搜索树的简称,当然需要满足二叉搜索树的性质,左子树小于根,根小于等于右子树:然后还要满足平衡树的基本特 ...
- 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 ...
- 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 ...
- 1066 Root of AVL Tree (25 分)【难 / 知识点: 平衡树 未完成】
https://pintia.cn/problem-sets/994805342720868352/problems/994805404939173888 平衡树之前学过,不过有忘完了,有时间补吧
- PAT1123 Is It a Complete AVL Tree(AVL树完全二叉树)
题意: 给出一系列数,要求组成AVL树,最后层序输出,并且判断是否为一个完全二叉树 要点: 这题就是一个AVL树的插入和判断完全二叉树,之前分别都有出现过,AVL树的建立需要记忆. #include& ...
- PTA甲级 1043 Is It a Binary Search Tree (25分) 树的遍历
强烈推荐,刷PTA的朋友都认识一下柳神–PTA解法大佬 本文由参考于柳神博客写成 柳神的CSDN博客,这个可以搜索文章 柳神的个人博客,这个没有广告,但是不能搜索 还有就是非常非常有用的 算法笔记 全 ...
- 树的平衡 AVL Tree
本篇随笔主要从以下三个方面介绍树的平衡: 1):BST不平衡问题 2):BST 旋转 3):AVL Tree 一:BST不平衡问题的解析 之前有提过普通BST的一些一些缺点,例如BST的高度是介于lg ...
- PAT甲级1123 Is It a Complete AVL Tree (30分):[C++题解]建立平衡树、bfs,判完全二叉树
文章目录 题目分析 题目链接 题目分析 来源:pat网站 本题作为进阶题,它的基础知识点如下几题. PAT甲级1066 Root of AVL Tree (25分):[C++题解]建立平衡树(AVL树 ...
- [转]C#与数据结构--树论--平衡二叉树(AVL Tree)
C#与数据结构--树论--平衡二叉树(AVL Tree) http://www.cnblogs.com/abatei/archive/2008/11/17/1335031.html 介绍 我们知道在二 ...
最新文章
- 【转】MongoDB C# / .NET Driver 中IMongoQuery的内部实现Query的用法
- 【字节码插桩】AOP 技术 ( “字节码插桩“ 技术简介 | AspectJ 插桩工具 | ASM 插桩工具 )
- 直接在script里面换样式IE6,7,8不兼容
- 阿里云天池 Python训练营Task2: Python基础练习:数据结构大汇总 学习笔记
- 解决: Failed to execute ... maven-deploy-plugin... Return code is: 401, ReasonPhrase: Unauthorized.
- 考虑云计算来降成本:良药或毒药?
- Codeforces 719B Anatoly and Cockroaches(元素的交叉排列问题)
- [转载]手机编程与AIDE
- 携程酒店自动化360度质量保障体系
- 【IT168 新闻】用友U9 SOA管理软件业标杆吗?
- 麒麟KY-RTI分布仿真技术:第一章 简介
- 计算日期在当月是第几周-【自然周(每月第一个周一为该月第一周)做法以及1号为第一周做法】
- Word删除空白页的方法
- 身为程序员就算月薪再高,想找女朋友的话这些你千万别做!
- NEYC 1702 排座 问题模型
- android技术帖,android好帖子
- H5音乐播放器我的2.0
- 轮播图的做法(更换背景图片)
- 【JavaWeb】Request对象详解
- Android AOA协议Android端 流程总结