目录
AVL树
AVL树是一种带有平衡条件的二叉搜索树,它保证每个节点的左子树和右子树高度最多差1。
组成高度为h的AVL树,需要最少的节点数S(h) = S(h-1) + S(h-2) + 1,如下图,这个高度为4的AVL树由三部分组成,左子树,右子树和根节点,左子树是高度为2,右子树高度是3,两棵子树都要求节点树最小,分别是S(2)和S(3),最后再加上根节点一个节点。所以高度为4的AVL树,需要的最少节点为S(4) = S(3) + S(2) + 1
AVL树的定义
typedef struct avlNode{
int element = 0;
avlNode *left = NULL;
avlNode *right = NULL;
int height = 0;
}avlNode;
AVL树插入
每次插入一个节点时,我们必须更新从插入节点到根节点的所有信息。插入一个节点后导致树从节点N开始不平衡,有如下四种情况:
1. 对N的左儿子(L)的左子树(L)进行了插入。(LL)
2. 对N对左儿子(L)对右子树(R)进行了插入。(LR)