/*
**AVL平衡树插入例程
**2014-5-30 11:44:50
*/ avlTree insert(elementType X, avlTree T){
if(T == NULL){
T = malloc(sizeof(struct avlTree));
if(T == NULL) fatalError("Out of space!!!");
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 = singleRotateWithLeft(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 = singleRotateWithRight(T);
else T = doubleRotateWithRight(T);
}
}
/*--假设X已经存在,那么啥都不用做--*/ T->height = max(height(T->left), height(T->right)) + 1;
return T;
} static position singleRotateWithLeft(position k2){
position 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;
} /*双右左旋就是先对T的右子树左单旋再对T本身右单旋*/
static position

AVL平衡树的插入例程的更多相关文章

  1. 实现Avl平衡树

    实现Avl平衡树   一.介绍 AVL树是一种自平衡的二叉搜索树,它由Adelson-Velskii和 Landis于1962年发表在论文<An algorithm for the organi ...

  2. Python与数据结构[3] -> 树/Tree[2] -> AVL 平衡树和树旋转的 Python 实现

    AVL 平衡树和树旋转 目录 AVL平衡二叉树 树旋转 代码实现 1 AVL平衡二叉树 AVL(Adelson-Velskii & Landis)树是一种带有平衡条件的二叉树,一棵AVL树其实 ...

  3. 数据结构学习-AVL平衡树

    环境:C++ 11 + win10 IDE:Clion 2018.3 AVL平衡树是在BST二叉查找树的基础上添加了平衡机制. 我们把平衡的BST认为是任一节点的左子树和右子树的高度差为-1,0,1中 ...

  4. AVL树的插入和删除

    一.AVL 树 在计算机科学中,AVL树是最早被发明的自平衡二叉查找树.在AVL树中,任一节点对应的两棵子树的最大高度差为 1,因此它也被称为高度平衡树.查找.插入和删除在平均和最坏情况下的时间复杂度 ...

  5. AVL树的插入操作(旋转)图解

    =================================================================== AVL树的概念       在说AVL树的概念之前,我们需要清楚 ...

  6. AVL 树的插入、删除、旋转归纳

    参考链接: http://blog.csdn.net/gabriel1026/article/details/6311339   1126号注:先前有一个概念搞混了: 节点的深度 Depth 是指从根 ...

  7. AVL树的实现例程

    /* AVL树的节点声明 */ #ifndef _AVLTREE_H #define _AVLTREE_H struct AvlNode; typedef struct AvlNode *Positi ...

  8. AVL 平衡树

    AVL是一种平衡二叉树,它通过对二叉搜索树中的节点进行旋转使得二叉搜索树达到平衡.AVL在所有的平衡二叉搜索树中具有最高的平衡性. 定义 平衡二叉树或者为空树或者为满足如下性质的二叉搜索树: 左右子树 ...

  9. AVL树的插入删除查找算法实现和分析-1

    至于什么是AVL树和AVL树的一些概念问题在这里就不多说了,下面是我写的代码,里面的注释非常详细地说明了实现的思想和方法. 因为在操作时真正需要的是子树高度的差,所以这里采用-1,0,1来表示左子树和 ...

随机推荐

  1. 九度oj 1003

    前几天开刷九度oj,准备把做的题都放上,先放1003 题目1003:A+B             时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:16923 解决:7029 题目描述: 给 ...

  2. 对于quartz的控制台不断打印

    控制台不断打印 batch acquisition of 0 triggers 解决方式   : 在log4j.properties的配置文件中加 log4j.logger.org.quartz=IN ...

  3. SQL Server 2016 KB2919355 安装失败

    Windows Server 2012 R2 安装 SQL Server 2016 检查未通过,需要安装 KB2919355 . 错误如下图: 按提示,下载安装 Windows Server 2012 ...

  4. 【MFC】Button控件和Picture Control的鼠标事件执行顺序

    1.Button控件鼠标事件执行顺序 (1) WM_LBUTTONDOWN (2) WM_LBUTTONUP (3) OnBnClickedButton1(); 2.Picture Control的鼠 ...

  5. WebRTC编译详细介绍 (转)

    WebRTC技术交流群:234795279   原文地址:http://blog.csdn.net/temotemo/article/details/7056581 WebRTC编译 本人环境: 操作 ...

  6. 转 浅谈C++中指针和引用的区别

    浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别   指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性 ...

  7. 50深入理解C指针之---指针与别名

    一.size_t:用于安全表示长度,所有平台和系统都会解析成自己对应的长度 1.定义:size_t类型表示C中任何对象所能表示的最大长度,是个无符号整数:常常定义在stdio.h或stdlib.h中 ...

  8. 40深入理解C指针之---指针与单链表

    一.指针与单链表 1.定义:通过使用指针将节点(结点)链接起来成为链表 2.节点(结点): 1).数据域:主要用来存储数据,可以基本数据类型,也可以是构造数据类型: 2).指针域:主要用来当前节点(结 ...

  9. poj 3614(网络流)

    Sunscreen Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6672   Accepted: 2348 Descrip ...

  10. CSS-文本(中,英)

    1.缩进文本:text-indent 2.水平对齐:text-align:  left/center/right/justify(实现两端对齐文本效果) 3.字间隔:word-spacing(可以改变 ...