• avl


      1 #include<cstdio>
      2 #include<algorithm>
      3 using namespace std;
      4 struct node{
      5  node *left;
      6  node *right;
      7  int height;
      8  int data;
      9  node(int x):data(x),left(NULL),right(NULL),height(0){}
     10 };
     11 struct avl
     12 {
     13     node* root;
     14     int Height(node *NODE) {
     15         if(NODE==NULL) return -1;
     16      return NODE->height;
     17     }
     18     node* RightRotate(node *a) {
     19      node *b = a->left;
     20      a->left = b->right;
     21      b->right = a;
     22      a->height = max(Height(a->left), Height(a->right));
     23      b->height = max(Height(b->left), Height(b->right));
     24      return b;
     25     }
     26     node* LeftRotate(node *a) {
     27      node *b = a->right;
     28      a->right = b->left;
     29      b->left = a;
     30      a->height = max(Height(a->left), Height(a->right));
     31      b->height = max(Height(b->left), Height(b->right));
     32      return b;
     33     }
     34     node* LeftRightRotate(node *a) {
     35      a->left = LeftRotate(a->left);
     36      return RightRotate(a);
     37     }
     38     node* RightLeftRotate(node* a) {
     39      a->right = RightRotate(a->right);
     40      return LeftRotate(a);
     41     }
     42     node* Insert(int x, node* t) {
     43      if(t == NULL) {
     44        t = new node(x);
     45        return t;
     46      } else if(x < t->data) {
     47        t->left = Insert(x,t->left);
     48        if(Height(t->left) - Height(t->right) == 2) {
     49         if(x < t->left->data) {
     50          t = RightRotate(t);
     51         } else {
     52          t = LeftRightRotate(t);
     53         }
     54       }
     55      } else {
     56        t->right = Insert(x,t->right);
     57        if(Height(t->right) - Height(t->left) == 2) {
     58         if(x > t->right->data) {
     59          t = LeftRotate(t);
     60         } else {
     61          t = RightLeftRotate(t);
     62         }
     63       }
     64      }
     65      t->height = max(Height(t->left), Height(t->right)) + 1;
     66      return t;
     67     }
     68     /*node* Delete(int x,node *t) {
     69     if(t==NULL) return NULL;
     70     if(t->data == x) {
     71     if(t->right == NULL) {
     72     node* temp = t;
     73     t = t->left;
     74     free(temp);
     75     } else {
     76     node* head = t->right;
     77     while(head->left) {
     78     head=head->left;
     79     }
     80     t->data = head->data; //just copy data
     81     t->right = Delete(t->data, t->right);
     82     t->height = max(Height(t->left), Height(t->right)) + 1;
     83     }
     84     return t;
     85      else if(t->data < x) {
     86     Delete(x, t->right);
     87     if(t->right) Rotate(x, t->right);
     88     } else {
     89     Delete(x, t->left);
     90     if(t->left) Rotate(x, t->left);
     91     }
     92     if(t) Rotate(x, t);
     93     }
     94 }*/
     95 };
     96 avl a;
     97 int main()
     98 {
     99     int n,x;
    100     scanf("%d",&n);
    101     a.root=NULL;
    102     for(int i=0;i<n;i++)
    103     {
    104         scanf("%d",&x);
    105         a.root=a.Insert(x,a.root);
    106     }
    107     return 0;
    108 }
    View Code
  • 相关阅读:
    字典_序列解包用于列表元组字典
    字典_序列解包用于列表元组字典
    字典_元素的访问_键的访问_值的访问_键值对的访问
    字典_特点_4种创建方式_普通-dict
    元组_生成器推导式创建元组-总结
    MySql高级
    技术点
    全文检索ElasticSearch
    数仓管理
    SpringCache
  • 原文地址:https://www.cnblogs.com/sooflow/p/3479138.html
Copyright © 2020-2023  润新知