关注
#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;
}
查看原帖
点赞 评论
相关推荐
06-03 19:26
西北农林科技大学 C++ 点赞 评论 收藏
分享
06-30 15:54
湖北文理学院 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你认为小厂实习有用吗? #
13733次浏览 186人参与
# 面试官是我前女友 #
106890次浏览 731人参与
# 实习生的蛐蛐区 #
39797次浏览 329人参与
# 当你面对裁员会如何? #
275921次浏览 2438人参与
# 计算机有哪些岗位值得去? #
12816次浏览 133人参与
# lastday知无不言 #
56850次浏览 460人参与
# 在职场上,你最讨厌什么样的同事 #
14421次浏览 150人参与
# 推荐一首陪你工作的歌吧 #
14002次浏览 97人参与
# 说说你知道的学历厂 #
28110次浏览 178人参与
# 你找工作的时候用AI吗? #
14783次浏览 192人参与
# 下班后的时间你怎么安排 #
7395次浏览 111人参与
# 哪一瞬间觉得自己长大了 #
7212次浏览 166人参与
# 携程求职进展汇总 #
559402次浏览 4258人参与
# 面试尴尬现场 #
23619次浏览 163人参与
# 工作后会跟朋友渐行渐远吗 #
30031次浏览 216人参与
# 中核求职进展汇总 #
20127次浏览 152人参与
# 社会教会你的第一课 #
29184次浏览 394人参与
# 多益网络工作体验 #
49626次浏览 280人参与
# 虾皮求职进展汇总 #
244159次浏览 1797人参与
# 神州信息工作体验 #
15996次浏览 75人参与