#include <iostream>
#include <algorithm>
using namespace std;
typedef struct TreeNode
{
int val, height;
TreeNode *left, *right;
} TreeNode;
TreeNode *root = nullptr;
int getheight(TreeNode *node)
{
if (node == nullptr)
return 0;
else
return node->height;
}
void updateheight(TreeNode *node)
{
node->height = max(getheight(node->left), getheight(node->right)) + 1;
}
void LL(TreeNode *node)
{
TreeNode *tmp=node->left;
node->left=tmp->left;
tmp->left=tmp->right;
tmp->right=node->right;
node->right=tmp;
swap(node->val,tmp->val);
updateheight(node->left);
updateheight(tmp);
updateheight(node);
}
void LR(TreeNode *node)
{
TreeNode *tmpB=node->left,*tmpC=tmpB->right;
node->left=tmpC;
tmpB->right=tmpC->left;
tmpC->left=tmpB;
updateheight(tmpB);
updateheight(tmpC);
LL(node);
}
void RR(TreeNode *node)
{
TreeNode *tmp=node->right;
node->right=tmp->right;
tmp->right=tmp->left;
tmp->left=node->left;
node->left=tmp;
swap(node->val,tmp->val);
updateheight(node->right);
updateheight(tmp);
updateheight(node);
}
void RL(TreeNode *node)
{
TreeNode *tmpB=node->right,*tmpC=tmpB->left;
node->right=tmpC;
tmpB->left=tmpC->right;
tmpC->right=tmpB;
updateheight(tmpB);
updateheight(tmpC);
RR(node);
}
int getbalancefactor(TreeNode *node)
{
if(node==nullptr) return 0;
return getheight(node->right) - getheight(node->left);
}
void insert(TreeNode *&node, int val)
{
if (node == nullptr)
{
node = new TreeNode;
node->val = val;
node->height = 1;
return;
}
if (val <= node->val)
{
insert(node->left, val);
updateheight(node);
if(getbalancefactor(node)==-2&&getbalancefactor(node->left)==-1)
LL(node);
else if(getbalancefactor(node)==-2&&getbalancefactor(node->left)==1)
LR(node);
}
else
{
insert(node->right, val);
updateheight(node);
if(getbalancefactor(node)==2&&getbalancefactor(node->right)==1)
RR(node);
else if(getbalancefactor(node)==2&&getbalancefactor(node->right)==-1)
RL(node);
}
return;
}
int main()
{
int N, tmp;
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
scanf("%d", &tmp);
insert(root, tmp);
}
printf("%d", root->val);
return 0;
}
1066 Root of AVL Tree (25 分)
最新推荐文章于 2024-07-12 16:27:59 发布