1066 Root of AVL Tree [重要 待分析 天勤] 算法下P325 平衡二叉树

//1066 Root of AVL Tree [重要 待分析  天勤] 算法下P325 平衡二叉树
#include <iostream>
using namespace std;
typedef struct BTNode{
    int data;
    struct BTNode *lChild,*rChild;
}BTNode;//C C++ 通用定义方式

BTNode* rotateL(BTNode *root){
    BTNode *t = root->rChild;
    root->rChild = t->lChild;
    t->lChild = root;
    return t;
}

BTNode* rotateR(BTNode *root){
    BTNode *t = root->lChild;
    root->lChild = t->rChild;
    t->rChild = root;
    return t;
}

BTNode *rotateLR(BTNode *root){
    root->lChild = rotateL(root->lChild);
    return rotateR(root);
}
BTNode* rotateRL(BTNode *root){
    root->rChild = rotateR(root->rChild);
    return rotateL(root);
}
int getHeight(BTNode *root){
    if(root == NULL) return 0;
    return max(getHeight(root->lChild),getHeight(root->rChild))+1;
}

void insert(BTNode *&root,int data){
    if(root == NULL){
        root = new BTNode();
        root->data = data;
        root->lChild = root->rChild = NULL;
    }else if(data < root->data){
        insert(root->lChild,data);
        if(getHeight(root->lChild) - getHeight(root->rChild) == 2){
            root = data < root->lChild->data ? rotateR(root) : rotateLR(root);
        }
    }else{ //相等的情况呢??
        insert(root->rChild,data);
        if(getHeight(root->lChild) - getHeight(root->rChild) == -2){
            root = data > root->rChild->data ? rotateL(root) : rotateRL(root);
        }
    }
}


int main(){
    int N,data;
    cin>>N;
    BTNode *root = NULL;
    for(int i=0;i<N;++i){
        cin>>data;
        insert(root,data);
    }
    cout<<root->data;
    return 0;
}

全部评论

相关推荐

05-07 19:10
已编辑
中国科学技术大学 C++
silly01:现在先去 momenta,8-9月去鹅找日常实习,八股文算法背好了你这随便进。不过建议补充一下后端知识,MySQL、Redis看下八股,再补个6824,加点go后台的技术栈,9月随便进大厂。CPP后端只能来WXG
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务