#include<stdio.h>
#include<stdlib.h> #define TRUE 1
#define FALSE 0
#define EH 0
#define LH 1
#define RH -1
//平衡二叉树的节点结构
typedef struct BiTNode{
int data;
int bf;//平衡因子
BiTNode *lchld,*rchild;
}BiTNode,*BiTree; typedef int Status;
//LL调整
void R_Rotate(BiTree &T)
{
BiTree p;
p=T->lchild;
T->lchild=p->rchild;
p->rchild=T;
T=p;
}
//RR调整
void L_Rotate(BiTree &T)
{
BiTree p;
p=T->rchild;
T->rchild=p->lchild;
p->lchild=T;
T=p;
}
//左平衡处理LL,LR
void LeftBalance(BiTree &T)
{
BiTree L,LR;
L=T->lchild;
switch(L->bf)
{
case :
L->bf=-;
T->bf=;
R_Rotate(T);
break;
case :
L->bf=T->bf=;
R_Rotate(T);
break;
case -:
LR=L->rchild;
switch(LR->bf)
{
case :
L->bf=T->bf=;
case -:
T->bf=;
L->bf=;
break;
case :
L->bf=;
T->bf=-;
break;
default:
break;
}
LR->bf=;
L_Rotate(T->lchild);
R_Rotate(T);
break;
default:
break;
}
}
//右平衡处理RR,RL
void RightBalance(BiTree &T)
{
BiTree R,RL;//调用函数,T为根,右边高于左边T->bf=-1;
R=T->rchild;//R是T的右孩子
switch(R->bf)
{
case -://如果T时右孩子和T它们的平衡因子相同,直接左旋。
T->bf=R->bf=;
L_Rotate(T);
break;
case :
T->bf=-;
R->bf=;
L_Rotate(T);
break;
case :
RL=R->lchild;
switch(RL->bf)
{
case :
T->bf=R->bf=;
break;
case -:
R->bf=;
T->bf=;
break;
case :
R->bf=-;
T->bf=;
break;
default:
break;
}
RL->bf=;
R_Rotate(T->rchild);
L_Rotate(T);
break;
}
} bool InsertAVLTree(BiTree &T,int key,bool taller)
{
if(!T)//T为空
{
T=(BiTree)malloc(sizeof(BiTNode));
T->bf=;
T->lchild=T->rchild=NULL;
T->data=key;
taller=true;
return true;
}
else
{
if(key==T->data)//已经存在key相同的元素,不用插入,返回false
{
taller=false;
return false;
}
if(key<T->data)//所插入的元素小于根的值,找他的左孩子比较
{
if(!InsertAVLTree(T->lchild,key,taller))
{
return false;
}
if(taller)
{
switch(T->bf)
{
case :
T->bf=;
taller=true;
break;
case :
LeftBalance(T);
taller=false;
break;
case -:
T->bf=;
taller=false;
break;
default:
break;
}
}
else
{
if(!InsertAVLTree(T->rchild,key,taller))
{
return false;
}
if(taller)
{
switch(T->bf)
{
case :
T->bf=-;
taller=true;
break;
case :
T->bf=;
taller=false;
break;
case -:
RightBalance(T);
taller=false;
break;
default:
break;
}
}
}
}
}
}

AVL平衡二叉树实现的更多相关文章

  1. 数据结构中很常见的各种树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)

    数据结构中常见的树(BST二叉搜索树.AVL平衡二叉树.RBT红黑树.B-树.B+树.B*树) 二叉排序树.平衡树.红黑树 红黑树----第四篇:一步一图一代码,一定要让你真正彻底明白红黑树 --- ...

  2. 3.1 C语言_实现AVL平衡二叉树

    [序] 上节我们实现了数据结构中最简单的Vector,那么来到第三章,我们需要实现一个Set set的特点是 内部有序且有唯一元素值:同时各种操作的期望操作时间复杂度在O(n·logn): 那么标准的 ...

  3. 数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)

    树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: BST树 ...

  4. AVL平衡二叉树

    AVL树 1.若它的左子树不为空,则左子树上所有的节点值都小于它的根节点值. 2.若它的右子树不为空,则右子树上所有的节点值均大于它的根节点值. 3.它的左右子树也分别可以充当为二叉查找树. 例如: ...

  5. PAT A1123 Is It a Complete AVL Tree (30 分)——AVL平衡二叉树,完全二叉树

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...

  6. AVL平衡二叉树实现,图解分析,C++描述,完整可执行代码

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  7. 查找(AVL平衡二叉树)

    [1]为什么需要平衡二叉树? 矛盾是推进事物向前发展的源动力. 那么平衡二叉树是从哪里来?肯定是有矛盾存在的.请看程来师的分析: [2]什么是平衡二叉树? 平衡二叉树的基本认识: [3]平衡二叉树的构 ...

  8. AVL平衡二叉树的各种问题(Balanced Binary Tree)

    AVL树或者是一棵空树,或者是具有以下性质的非空二叉搜索树: 1. 任一结点的左.右子树均为AVL树: 2.根结点左.右子树高度差的绝对值不超过1. 1.声明 #include<iostream ...

  9. Java数据结构(十四)—— 平衡二叉树(AVL树)

    平衡二叉树(AVL树) 二叉排序树问题分析 左子树全部为空,从形式上看更像一个单链表 插入速度没有影响 查询速度明显降低 解决方案:平衡二叉树 基本介绍 平衡二叉树也叫二叉搜索树,保证查询效率较高 它 ...

随机推荐

  1. slf4j日志使用

    scala中 trait LogSupport { protected val log = LoggerFactory.getLogger(this.getClass) } 需要要到的类 extend ...

  2. windows程序设计 加载位图图片

    现在网上随便下个jpg图片,用windows自带的画图工具打开,点击画图工具左上角,文件->另存为->选择bmp,点击保存,保存好后,就得到一张位图了. 得到的位图,位图的内存比原图片jp ...

  3. 完成登录功能,用session记住用户名

    登录功能完成: js:设置return html:设置 form input py: @app.route设置methods GET POST 读取表单数据 查询数据库 用户名密码对: 记住用户名 跳 ...

  4. webform-AJAX

    AJAX = 异步 JavaScript和XML(标准通用标记语言的子集).AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着 ...

  5. AARRR海盗模型简介

    整理下AARRR模型的概念.实际应用场景等问题,初步感觉这个模型主要应用在APP应用分析中. 1.什么是AARRR模型 AARRR是Acquisition.Activation.Retention.R ...

  6. Twisted简介

    Twisted是用Python实现的基于事件驱动的网络引擎框架,Twisted支持许多常见的传输及应用层协议,包括TCP.UDP.SSL/TLS.HTTP.IMAP.SSH.IRC以及FTP.就像Py ...

  7. URL与视图

    path函数 path函数的定义为:path(route,view,name=None,kwargs=None).以下对这几个参数进行讲解. route 参数 url的匹配规则.这个参数中可以指定ur ...

  8. java 全局变量 的小结

    利用关键字final声明常量,对于全局的常量(即在整个项目中都可用)通常按以下模式声明:public static final int MAX_VALUE=512 如果某常量只在本类使用,则应将其定义 ...

  9. Fast Matrix Calculation HDU - 4965

    One day, Alice and Bob felt bored again, Bob knows Alice is a girl who loves math and is just learni ...

  10. Windows安装MySQL5.7.23 zip包

    工欲善必先利其器 # 环境: Win7旗舰版 + MySQL5.7.23 # 用到的命令: mysqld --initialize -- 初识化 mysqld --install -- 添加到Wind ...