PAT1123 Is It a Complete AVL Tree
1123 Is It a Complete AVL Tree (30分)
题目链接
存一个模板,以后背这个
#include
using namespace std;
struct node{
int data;
node* left;
node* right;
};
struct sq{int i,data;};
vector v;
bool cmp(sq& a,sq& b){return a.iright;
tree->right=temp->left;
temp->left=tree;
return temp;
}
node* r(node* tree){
node* temp=tree->left;
tree->left=temp->right;
temp->right=tree;
return temp;
}
node* lr(node* tree){
tree->left=l(tree->left);
return r(tree);
}
node* rl(node* tree){
tree->right=r(tree->right);
return l(tree);
}
int height(node* tree){
if(tree==NULL)return 0;
int l=height(tree->left);
int r=height(tree->right);
return max(l,r)+1;
}
node* insert(node* tree,int v){
if(tree==NULL){
tree=new node();
tree->data=v;
}
else if(vdata){
tree->left=insert(tree->left,v);
if(height(tree->left)-height(tree->right)>=2){
if(vleft->data)tree=r(tree);
else tree=lr(tree);
}
}
else{
tree->right=insert(tree->right,v);
if(height(tree->right)-height(tree->left)>=2){
if(v>tree->right->data)tree=l(tree);
else tree=rl(tree);
}
}
return tree;
}
void dfs(node* tree,int i){
if(tree==NULL)return ;
v.push_back({i,tree->data});
dfs(tree->left,2*i);
dfs(tree->right,2*i+1);
}
int main(){
int n,i,m,judge=1;
scanf("%d",&n);node* tree=NULL;
for(i=0;i