zoukankan      html  css  js  c++  java
  • AVL树实现

    AVL树的节点声明

    #ifndef _AvlTree_H
    
    struct AvlNode;
    typedef struct AvlNode *Position;
    typedef struct AvlNode *AvlTree;
    
    AvlTree MakeEmpty(AvlTree T);
    Position Find( ElementType X,AvlTree T);
    Position FindMin(AvlTree T);
    Position FindMax(AvlTree T);
    AvlTree Insert(ElementType X,AvlTree T);
    AvlTree Delete(ElementType X,AvlTree T);
    ElementType Retrieve(Position P);
    
    #endif
    
    struct AvlNode
    {
    	ElementType Element;
    	AvlTree Left;
    	AvlTree Right;
    	int Height;
    };
    

    计算AVL节点高度

    static int Height(Position P)
    {
    	if(P == NULL)
    		return -1;
    	else
    		return P->Height;
    }
    

    向AVL树插入节点

    AvlTree Insert(ElementType X,AvlTree T)
    {
    	if(T == NULL)
    	{
    		T = malloc(sizeof(struct AvlNode));
    		if(T == NULL)
    			FataError("Out of space!!!");
    		else
    		{
    			T->Element = X;T->Height = 0;
    			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 = SingleRotateWinthLeft(T);
    			else
    				T = DoubleRotateWithLeft(T);
    	}
    	else if (X > T->Element)
    	{
    		T->Right = Insert(X,T->Right);
    		if(Height(T->Right) - Height(T->Left) == 2)
    			if(X > T->Right->Element)
    				T = SingleRotateWinthRight(T);
    			else
    				T = DoubleRotateWithRight(T);
    	}
    	T->Height = Max(Height(T->Left),Height(T->Right)) + 1;
    	return T;
    }
    

    执行单旋转操作

    static Position SingleRotateWinthLeft(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;
    	return K1;
    }
    

    执行双旋转操作

    static Position DoubleRotateWithLeft(Position K3)
    {
    	K3->Left = SingleRotateWithRight(K3->Left);
    	return SingleRotateWithLeft(K3);
    }
  • 相关阅读:
    [linux1exe元旦特供]基于wine的IE6一键安装
    http://www.tianya.cn/publicforum/content/funinfo/1/1869814.shtml
    最全的design pattern 概述
    例解 autoconf 和 automake 生成 Makefile 文件
    根据条件分组SQL
    SQL Express自动备份
    通过asp.net 短信猫发短信
    EXT.NET GridPanel(按键事件带参的另一种写法)
    Asp.net操作IIS(调试通过)
    面向接口编程详解——编程实例(T2噬菌体)
  • 原文地址:https://www.cnblogs.com/y3w3l/p/6363666.html
Copyright © 2011-2022 走看看