zoukankan      html  css  js  c++  java
  • avl tree c++

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include<algorithm>
    using namespace std;
    struct node {
        int val;
        node* left,  * right;
    };
    node* rotateLeft(node* root) {//left down
        node* t = root->right;//0
        root->right = t->left;//   0 ->    0
        t->left = root;//               0
        return t;
    }
    node* rotateRight(node* root) {//right down
        node* t = root->left;//   0    
        root->left = t->right;//0     ->   0  
        t->right = root;//                    0
        return t;
    }
    node* rotateLeftRight(node* root) {//        0             0      
        root->left = rotateLeft(root->left);//0        ->    0     ->    0
        return rotateRight(root);//              0        0           0     0
    }
    node* rotateRightLeft(node* root) {//        0 
        root->right = rotateRight(root->right);//   0
        return rotateLeft(root);//               0 
    }
    int getHeight(node* root) {
        if (root == NULL) return 0;
        return max(getHeight(root->left), getHeight(root->right)) + 1;
    }
    node* insert(node * root, int val) {
        if (root == NULL) {
            root = new node();
            root->val = val;
            root->left = root->right = NULL;
        }
        else if (val < root->val) {
            root->left = insert(root->left, val);
            if (getHeight(root->left) - getHeight(root->right) == 2)
                root = val < root->left->val ? rotateRight(root) : rotateLeftRight(root);
        }
        else {
            root->right = insert(root->right, val);
            if (getHeight(root->left) - getHeight(root->right) == -2)
                root = val > root->right->val ? rotateLeft(root) : rotateRightLeft(root);
        }
        return root;
    }
    int main() {
        int n, val;
        scanf("%d", &n);
        node* root = NULL;
        for (int i = 0; i < n; i++) {
            scanf("%d", &val);
            root = insert(root, val); 
        }
        printf("%d", root->val);
        return 0;
    }
  • 相关阅读:
    oracle中的一些基本概念
    Oracle角色、权限的一些常用视图
    Oracle 11g的Deferred Segment Creation
    Oracle 11g导出空表、少表的解决办法
    Java输入输出流
    URL 长度有限制吗?
    hibernate---步骤
    Struts+Spring+Hibernate整合入门详解
    SSH框架总结(框架分析+环境搭建+实例源码下载)
    Spring实战1:Spring初探
  • 原文地址:https://www.cnblogs.com/masayoshi/p/10894600.html
Copyright © 2011-2022 走看看