pta 编程题10 Root of AVL Tree
其它pta数据结构编程题请参见:pta
这道题考察平衡二叉查找树的插入。
为了保证二叉查找树的平衡,当一个结点的左右子树的高度差大于1时就要进行调整。
分为以下四种情况:
插入新节点后,以及旋转之后,需要更新结点的高度。
RL旋转可以通过右孩子的LL旋转,然后当前节点的RR旋转实现。
同理,LR旋转可以通过左孩子的RR旋转,然后当前节点的LL旋转实现。
1 #include <iostream> 2 using namespace std; 3 4 typedef struct Node *Tree; 5 struct Node 6 { 7 int data; 8 Tree left; 9 Tree right; 10 int height; 11 }; 12 13 Tree insert(Tree T, int X); 14 Tree ll(Tree A); 15 Tree lr(Tree A); 16 Tree rr(Tree A); 17 Tree rl(Tree A); 18 int getHeight(Tree T); 19 int max(int a, int b); 20 Tree createNode(int X); 21 22 int main() 23 { 24 int N, X, i; 25 cin >> N >> X; 26 Tree root = createNode(X); 27 for (i = 1; i < N; i++) 28 { 29 cin >> X; 30 root = insert(root, X); 31 } 32 cout << root->data; 33 return 0; 34 } 35 36 Tree insert(Tree T, int X) 37 { 38 if (!T) 39 T = createNode(X); 40 else if (X < T->data) 41 { 42 T->left = insert(T->left, X); 43 if (getHeight(T->left) - getHeight(T->right) == 2) 44 { 45 if (X < T->left->data) 46 T = ll(T); 47 else 48 T = lr(T); 49 } 50 } 51 else if (X > T->data) 52 { 53 T->right = insert(T->right, X); 54 if (getHeight(T->right) - getHeight(T->left) == 2) 55 { 56 if (X > T->right->data) 57 T = rr(T); 58 else 59 T = rl(T); 60 } 61 } 62 T->height = max(getHeight(T->left), getHeight(T->right)) + 1; 63 return T; 64 } 65 66 Tree ll(Tree A) 67 { 68 Tree B = A->left; 69 A->left = B->right; 70 B->right = A; 71 A->height = max(getHeight(A->left), getHeight(A->right)) + 1; 72 B->height = max(getHeight(A->left), A->height) + 1; 73 return B; 74 } 75 76 Tree rr(Tree A) 77 { 78 Tree B = A->right; 79 A->right = B->left; 80 B->left = A; 81 A->height = max(getHeight(A->left), getHeight(A->right)) + 1; 82 B->height = max(A->height, getHeight(B->right)) + 1; 83 return B; 84 } 85 86 Tree lr(Tree A) 87 { 88 A->left = rr(A->left); 89 return ll(A); 90 } 91 92 Tree rl(Tree A) 93 { 94 A->right = ll(A->right); 95 return rr(A); 96 } 97 98 int getHeight(Tree T) 99 { 100 if (T == NULL) return 0; 101 else return T->height; 102 } 103 104 int max(int a, int b) 105 { 106 return a > b ? a : b; 107 } 108 109 Tree createNode(int X) 110 { 111 Tree T; 112 T = new Node; 113 T->data = X; 114 T->left = T->right = NULL; 115 T->height = 1; 116 return T; 117 }
View Code
转载于:https://www.cnblogs.com/lxc1910/p/8810906.html
pta 编程题10 Root of AVL Tree相关推荐
- 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 ...
- 1066 Root of AVL Tree——PAT甲级 | 参考mooc实现完整代码
Root of AVL Tree 2013年浙江大学计算机学院免试研究生上机考试真题,是关于AVL树的基本训练. 原题链接:PTA | 程序设计类实验辅助教学平台 题目描述 AVL 树是一种自平衡的 ...
- 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 ...
- JavaScript初学者编程题(10)
JavaScript初学者编程题(10) 题目:将一个正整数分解质因数.例如:输入90,打印出90=233*5. HTMl部分 <input type="text" id=& ...
- PAT甲级1066 Root of AVL Tree (25分):[C++题解]建立平衡树(AVL树)
文章目录 题目分析 题目链接 题目分析 图片来源:acwing 分析 平衡树(AVL树)是平衡二叉搜索树的简称,当然需要满足二叉搜索树的性质,左子树小于根,根小于等于右子树:然后还要满足平衡树的基本特 ...
- PAT A1066 Root of AVL Tree ——春水碧于天,画船听雨眠
PAT A1066 Root of AVL Tree AVL这东西记一次忘一次,每次看就像披着初恋外衣的旧情人(or reverse) 以下应该是较为标准的模板方法,只是好久没有用过指针了,所以写了个 ...
- PAT1066 Root of AVL Tree (25)(AVL树)
题意: 给出一系列要插入平衡搜索二叉树的数,要求输出最后的根节点 思路: 没其他办法,完完全全是AVL树的插入节点模拟,这题就不会写,看别人代码写的. #include<iostream> ...
- pta编程题python答案提交显示非零返回_PTA中提交Python3程序的一些套路
0. FAQ whileTrue: raw=input()if raw == '':break print(sum(map(int, raw.split()))) 0.1 提交后提示"答案错 ...
- 1066 Root of AVL Tree 需再做
1. 这题如果不知道平衡二叉树怎么平衡的(左旋右旋那一套)应该不可能做出吧,那就输出中位数回点血了. 2. 需要具备的基础知识:怎么将结点插入平衡二叉树. 3. 我犯的一个错误:把更新高度的函数直接返 ...
- 【PAT A1066】Root of AVL Tree
#include <cstdio> #include <algorithm> using namespace std;struct node {int v, height; / ...
最新文章
- c++的uint8不赋值_2021国考 | 用对方法后,赋值法竟然变得如此简单!
- opencv 车牌切割
- Java工程师知识图谱
- sqlite 0转换为bit_Cisco Talos在SQLite中发现了一个远程代码执行漏洞
- lambda表达式学习(详细理解 ) 重点在最后
- Excel字符串截取(leftrightmid)
- 【NIPS 2017】基于深度强化学习的想象力增强智能体
- zuc算法代码详解_ZUC算法了解
- INTERVAL 用法
- OpenStack开源云平台
- 量化投资与python语言_在量化投资领域,为什么Python如此受欢迎?
- 启动MySQL发生系统错误 1058
- 电商平台开发你需要注意下面的几点!
- 卡通的平板卧推男孩动画特效
- 使用java进行SSL证书的签名与签验
- 如何提高福禄克DTX-1800的测试余量
- 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java基于流浪宠物领养系统8xg84
- ELLE风尚大典暨全球75周年庆典在成都环球中心举办
- 多少鸿蒙冰心对无间,鸿蒙造句
- Module-Huey任务队列
热门文章
- 实战案例:探索星巴克的世界分布
- Ubuntu 搭建Facebook ATC弱网测试环境 使用路由器搭建ATC
- NGS中的一些软件功能介绍
- HDU1215 七夕节(模拟 数学)
- 第八章、面向对象设计
- godaddy虚拟主机access数据库中文乱码的解决方法
- warning: mysql-community-libs-5.7.11-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5
- 实验一:命令解释程序
- C#用正则表达式 获取网页源代码标签的属性或值
- 如何遍历json属性和动态添加属性