zoukankan      html  css  js  c++  java
  • AVL 树

    一棵AVL树是每个节点的左子树和右子树的高度最多差1的二叉查找树

    SearchTree Insert(ElementType X, SearchTree T) {
        if (T == NULL) {
            T == malloc(sizeof(struct TreeNode));
            if (T == NULL) {
                Error("out of space");
            }
            else {
                T->Element = X;
                T->Left = T-Right = NULL;
            }
        }
        else if (X < T->Element) {
            T->Left = Insert(X, T->Left);
            if (Height(T->Left)-Height(T->Right) == 2)
                if (X < T->Left->Element)
                    T = SingleRotateWithLeft(T);
                else 
                    T = DoubleRotateWithLeft(T);
        }
        else {
            T-Right = Insert(X, T->Right);
            if (Height(T->Right)-Height(T->Left) == 2)
                if (X > T->Right->Element)
                    T = SingleRotateWithRight(T);
                else 
                    T = DoubleRotateWithRight(T);
        }     
        T->Height = Max(Height(T->Left, Height(T->Right))) + 1;
        return T;
    }
    
    static Position SingleRotateWithLeft(Position K2) {
        Position K1;
    
        K1 = K2->Left;
        K2->Left = K1->Right;
        K1->Right = K2;
        K2->Height = Max(Height(K2->Left), Height(K2->Right)) + 1;
        K1->Height = Max(Height(K1->Left), K2->Height) + 1;
    
        reutrn K1;
    }
    
    static Position DoubleRotateWithLeft(Position K3) {
        K3->Left = SingleRotateWithRight(K3->Left);
        return SingleRotateWithLeft(K3);
    }
  • 相关阅读:
    [转]java.lang.OutOfMemoryError: Java heap space内存不足问题
    xx
    HTTP协议详解--(转)
    树的子结构
    合并两个排序的链表
    链表反转
    环的入口节点
    链表中倒数第k个节点 (相关的 单链表的中间节点!)
    正则表达式
    表示数值的字符串
  • 原文地址:https://www.cnblogs.com/m2492565210/p/7258757.html
Copyright © 2011-2022 走看看