关注
#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;
}
查看原帖
点赞 评论
相关推荐

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你的国庆怎么过 #
57555次浏览 527人参与
# 应届生第一份工作最好去大厂吗? #
29484次浏览 529人参与
# 思朗科技求职进展汇总 #
58993次浏览 411人参与
# 哪些公司真双非友好? #
27677次浏览 118人参与
# 秋招感动瞬间 #
30588次浏览 290人参与
# 贝壳求职进展汇总 #
30368次浏览 173人参与
# 乐堡互娱校招 #
34393次浏览 289人参与
# 4399求职进展汇总 #
31913次浏览 168人参与
# 你会为了工作牺牲生活吗? #
46588次浏览 372人参与
# 海尔求职进展汇总 #
9957次浏览 37人参与
# 机械人的薪资开到多少,才适合去? #
128152次浏览 473人参与
# 国企秋招,你投了吗? #
25570次浏览 198人参与
# 德州仪器求职进展汇总 #
10843次浏览 160人参与
# 工作后会跟朋友渐行渐远吗 #
39795次浏览 267人参与
# 机械只有转码才有出路吗? #
141601次浏览 1630人参与
# 机械人,你拿到几个offer啦 #
47827次浏览 355人参与
# ___岗狗都不干,我干! #
21781次浏览 158人参与
# 歌尔求职进展汇总 #
67090次浏览 353人参与
# 入职跑路最快的一次经历 #
35064次浏览 239人参与
# 机械人值得去的国央企 #
78861次浏览 450人参与
# 大厂面试初体验 #
55849次浏览 265人参与
# 你在职场中沾染到的“坏”习惯 #
18428次浏览 133人参与