关注
#include<bits/stdc++.h>
using namespace std;
struct Node{
int val;
Node* left=NULL;
Node *right = NULL;
};
//最终分解为向左向右两种旋转
Node * LL(Node *root){
Node *head = root->left;
root->left = head->right;
head->right = root;
return head;
}
Node * RR(Node *root){
Node *head = root->right;
root->right = head->left;
head->left = root;
return head;
}
Node * LR(Node *root){
root->left = RR(root->left);
return LL(root);
}
Node * RL(Node *root){
root->right = LL(root->right);
return RR(root);
}
int getDepth(Node *root,int d){
if (!root)return d;
return max(getDepth(root->left, d + 1), getDepth(root->right, d + 1));
}
Node* InsertAVL(Node* root, Node* n){
if (!root){
root = n;
}else if (n->val<root->val){
root->left = InsertAVL(root->left, n);
if (getDepth(root->left,1) - getDepth(root->right,1) == 2)
{
if (n->val < root->left->val)
root = LL(root);
else
root = LR(root);
}
}else if (n->val>root->val){
root->right = InsertAVL(root->right, n);
if (getDepth(root->left, 1) - getDepth(root->right, 1) == -2)
{
if (n->val > root->right->val)
root = RR(root);
else
root = RL(root);
}
}
return root;
}
int main(){
int N;
cin >> N;
Node *root = new Node;
cin >> root->val;
for (int i = 1; i < N;i++){
Node *n = new Node;
cin >> n->val;
root=InsertAVL(root, n);
}
cout << root->val;
return 0;
}
查看原帖
点赞 评论
相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 找工作,行业重要还是岗位重要? #
12010次浏览 224人参与
# 来聊聊机械薪资天花板是哪家 #
110071次浏览 720人参与
# 机械人怎么评价今年的华为 #
188335次浏览 1502人参与
# 硬件兄弟们 甩出你的华为奖状 #
93065次浏览 670人参与
# 机械人与华为的爱恨情仇 #
103290次浏览 921人参与
# 24届硬件人与华为的爱恨情仇 #
117904次浏览 962人参与
# 机械专业只有考研才有出路吗 #
93116次浏览 850人参与
# 你最满意的offer薪资是哪家公司? #
15733次浏览 119人参与
# 金融财会交流会 #
98764次浏览 361人参与
# 国企还是互联网,你怎么选? #
123827次浏览 960人参与
# 盲审过后你想做什么? #
13524次浏览 119人参与
# 五一之后,实习真的很难找吗? #
49845次浏览 353人参与
# 外包能不能当跳板? #
22754次浏览 192人参与
# 机械人还在等华为开奖吗? #
211951次浏览 1088人参与
# 设计人如何选offer #
99066次浏览 694人参与
# 国企/银行/研究所公司爆料 #
121498次浏览 742人参与
# 潍柴工作体验 #
17297次浏览 17人参与
# 摸鱼被leader发现了怎么办 #
41363次浏览 316人参与
# Offer比较,求稳定还是求发展 #
39388次浏览 226人参与
# 运营面经 #
98752次浏览 1201人参与