zoukankan      html  css  js  c++  java
  • AVL

    #include<iostream>
    using namespace std;
    struct node {
        int v,height;
        node*lchild;
        node*rchild;
        int data;
    };
    int x;
    node* newNode(int v) {
        node*Node =new node;
        Node->v=v;
        Node->height=1;
        Node->lchild=Node->rchild=NULL;
        return Node;
    
    }
    
    int getHeight(node* root) {
        if(root==NULL) return 0;
        return root->height;
    }
    
    int getBalanceFactor(node* root) {
        return getHeight(root->lchild)-getHeight(root->rchild);
    
    }
    
    void updateHeight(node* root) {
        root->height=max(getHeight(root->lchild),getHeight(root->rchild))+1;
    }
    
    void search(node* root,int x) {
        if(root==NULL) {
            printf("search failed
    ");
            return;
        }
        if(x==root->data) {
            printf("%d
    ",root->data);
        } else if(x<root->data) {
            search(root->lchild,x);
        } else {
            search(root->rchild,x);
        }
    }
    
    void L(node* &root) {
        node*temp=root->rchild;
        root->rchild=temp->lchild;
        temp->lchild=root;
        updateHeight(root);
        updateHeight(temp);
        root=temp;
    
    }
    
    void R(node* &root) {
        node*temp=root->lchild;
        root->lchild=temp->rchild;
        temp->rchild=root;
        updateHeight(root);
        updateHeight(temp);
        root=temp;
    }
    
    
    
    void insert(node* &root,int v) {
        if(root==NULL) {
            root=newNode(v);
            return;
        }
        if(v<root->v) {
            insert(root->lchild,v);
            updateHeight(root);
            if(getBalanceFactor(root)==2) {
                if(getBalanceFactor(root->lchild)==1) {
                    R(root);
                } else if(getBalanceFactor(root->lchild)==-1) {
                    L(root->lchild);
                    R(root);
                }
            }
    
        }else
        {
            insert(root->rchild,v);
            updateHeight(root);
            if(getBalanceFactor(root)==-2) {
                if(getBalanceFactor(root->lchild)==-1) {
                    L(root);
                } else if(getBalanceFactor(root->lchild)==1) {
                    R(root->lchild);
                    L(root);
                }
            }
        }
    }
    
    
    node* Create(int data[],int n)
    {
        node* root=NULL;
        for(int i=0;i<n;i++)
        {
            insert(root,data[i]);
        }
        return root;
    }
    
    int main()
    {
        return 0;
    }

    #include<iostream>
    using namespace std;
    struct node {
        int v,height;
        node*lchild;
        node*rchild;
        int data;
    };
    int x;
    node* newNode(int v) {
        node*Node =new node;
        Node->v=v;
        Node->height=1;
        Node->lchild=Node->rchild=NULL;
        return Node;

    }

    int getHeight(node* root) {
        if(root==NULL) return 0;
        return root->height;
    }

    int getBalanceFactor(node* root) {
        return getHeight(root->lchild)-getHeight(root->rchild);

    }

    void updateHeight(node* root) {
        root->height=max(getHeight(root->lchild),getHeight(root->rchild))+1;
    }

    void search(node* root,int x) {
        if(root==NULL) {
            printf("search failed ");
            return;
        }
        if(x==root->data) {
            printf("%d ",root->data);
        } else if(x<root->data) {
            search(root->lchild,x);
        } else {
            search(root->rchild,x);
        }
    }

    void L(node* &root) {
        node*temp=root->rchild;
        root->rchild=temp->lchild;
        temp->lchild=root;
        updateHeight(root);
        updateHeight(temp);
        root=temp;

    }

    void R(node* &root) {
        node*temp=root->lchild;
        root->lchild=temp->rchild;
        temp->rchild=root;
        updateHeight(root);
        updateHeight(temp);
        root=temp;
    }



    void insert(node* &root,int v) {
        if(root==NULL) {
            root=newNode(v);
            return;
        }
        if(v<root->v) {
            insert(root->lchild,v);
            updateHeight(root);
            if(getBalanceFactor(root)==2) {
                if(getBalanceFactor(root->lchild)==1) {
                    R(root);
                } else if(getBalanceFactor(root->lchild)==-1) {
                    L(root->lchild);
                    R(root);
                }
            }

        }else
        {
            insert(root->rchild,v);
            updateHeight(root);
            if(getBalanceFactor(root)==-2) {
                if(getBalanceFactor(root->lchild)==-1) {
                    L(root);
                } else if(getBalanceFactor(root->lchild)==1) {
                    R(root->lchild);
                    L(root);
                }
            }
        }
    }


    node* Create(int data[],int n)
    {
        node* root=NULL;
        for(int i=0;i<n;i++)
        {
            insert(root,data[i]);
        }
        return root;
    }

    int main()
    {
        return 0;
    }

  • 相关阅读:
    Java中的日期(Calendar、Date)
    java上传、下载、删除ftp文件
    JAVA中使用FTPClient实现文件上传下载
    使用JSch实现SFTP文件传输
    linux 如何显示一个文件的某几行(中间几行)
    java常用流处理工具StreamTool 常见的InputStream流转字符串, 转字节数组等等
    String与InputStream互转的几种方法
    day 13
    day 12
    day11 大纲
  • 原文地址:https://www.cnblogs.com/tianyudizhua/p/13492899.html
Copyright © 2011-2022 走看看