AVL树的c语言实现
程序员文章站
2022-04-18 13:13:28
AVL树的c语言实现:在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏...
AVL树的c语言实现:在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。节点 (1)节点的定义
typedef int KeyType; typedef struct AvlNode { KeyType key; //数据 AvlNode *leftchild; //左孩子 AvlNode *rightchild; //右孩子 AvlNode *parent; //双亲结点 int balance; //平衡因子 }AvlNode,*AvlTree;
(2)结点的创建
AvlNode *BuyNode() { AvlNode *p =(AvlNode *)malloc(sizeof(AvlNode)); if( p != NULL) { p->leftchild = NULL; p->rightchild = NULL; p->parent = NULL; p->balance = 0; } return p; }
2.旋转
如果在AVL树中进行插入或删除节点后,可能导致AVL树失去平衡。这种失去平衡的可以概括为4种姿态:左单旋转,右单旋转,左平衡,右平衡。(1)左单旋转:也叫左左旋转。