将给定的一系列数字插入初始为空的 AVL 树,请你输出最后生成的 AVL 树的根结点的值。
输入格式:
输入的第一行给出一个正整数 N(≤20),随后一行给出 N 个不同的整数,其间以空格分隔。
输出格式:
在一行中输出顺序插入上述整数到一棵初始为空的 AVL 树后,该树的根结点的值。
输入样例 1:
5
88 70 61 96 120
输出样例 1:
70
输入样例 2:
7
88 70 61 96 120 90 65
输出样例 2:
88
#include<stdio.h>
#include<malloc.h>
int node,value;
typedef struct type{
int data;
struct type* left;
struct type* right;
}*balance;
int height(balance tree){
int heightl,heightr;
if(!tree)return 0;
heightl=height(tree->left);
heightr=height(tree->right);
return (heightl>heightr?heightl:heightr)+1;
}
balance singlel(balance tree){
balance temp=tree->left;
tree->left=temp->right;
temp->right=tree;
return temp;
}
balance singler(balance tree){
balance temp=tree->right;
tree->right=temp->left;
temp->left=tree;
return temp;
}
balance leftr(balance tree){
tree->left=singler(tree->left);
return singlel(tree);
}
balance rightl(balance tree){
tree->right=singlel(tree->right);
return singler(tree);
}
balance insert(int value,balance tree){
if(!tree){
tree=(balance)malloc(sizeof(balance));
tree->data=value;
tree->left=NULL;
tree->right=NULL;
}
else{
if(value<tree->data){
tree->left=insert(value,tree->left);
if(height(tree->left)-height(tree->right)>1){
if(value<tree->left->data)tree=singlel(tree);
else tree=leftr(tree);
}
}
else{
tree->right=insert(value,tree->right);
if(height(tree->right)-height(tree->left)>1){
if(value>tree->right->data)tree=singler(tree);
else tree=rightl(tree);
}
}
}
return tree;
}
int main(){
balance tree=NULL;
scanf("%d",&node);
while(node--){
scanf("%d",&value);
tree=insert(value,tree);
}
printf("%d",tree->data);
return 0;
}