二叉平衡树,边插入边调整,对每一次插入都有判断调整,所以总过程是插入——判断——调整,判断与调整写在同一个
函数里面,LeftBalance/rightBalance;虽然有四种旋转,但实际上可归结为两种,平衡因子为+2与-2的,当然还有一种是<的;+2是左子树太长了,+2也有两种情况,一种是/型,还有种是<型,前者我们称作LL调整,需要右旋即可,后者我们称作LR型,需要对其下面的左旋,再对上面的右旋,+2调整函数是LeftBalance;-2是左子树不管了,-2的同理;判断通过平衡因子
/***********************************
二叉平衡树,边插入边调整,对每一次插入都有判断调整,
所以总过程是插入——判断——调整,判断与调整写在同一个
函数里面,LeftBalance/rightBalance;虽然有四种旋转,但
实际上可归结为两种,平衡因子为+2与-2的,当然还有一种
是<2的;+2是左子树太长了,+2也有两种情况,一种是/型,
还有种是<型,前者我们称作LL调整,需要右旋即可,后者
我们称作LR型,需要对其下面的左旋,再对上面的右旋,+2
调整函数是LeftBalance;-2是左子树不管了,-2的同理;
判断通过平衡因子
***********************************/
#include<stdio.h>
#include<stdlib.h>
#define EH 0 /*等高*/
#define LH 1 /*左高*/
#define RH -1 /*右高*/
typedef int ElemType; /*数据类型*/
typedef struct BiTree{
ElemType data; /*数据元素*/
int BF; /*平衡因子*/
struct BiTree *lchild,*rchild; /*左右子女指针*/
}*Bitree,BitreeNode;
int InsertAVL