平衡二叉树,简称平衡树(AVL树)----树上任一结点的左子树和右子树的高度之差不超过1.
结点的平衡因子=左子树高-右子树高

//平衡二叉树结点
typedef struct AVLNode {
int key;//数据域
int blalance;//平衡因子
struct AVLNode* lchild, * rchild;
}AVLNode,*AVLTree;
平衡二叉树的插入
在二叉排序树中插入新结点后,如何保持平衡?
调整最小不平衡子树

LL:

RR:

LR:

RL:



代码思路:
右旋转:

// 右旋转
Node *rightRotate(Node *y) {
Node *x = y->left;
Node *T2 = x->right;
// 执行旋转
x->right = y;
y->left = T2;
// 更新高度
y->height = max(height(y->left), height(y->right)) + 1;
x->height = max(height(x->left), height(x->right)) + 1;
// 返回新的根节点
return x;
}
左旋转:

// 左旋转
Node *leftRotate(Node *x) {
Node *y = x->right;
Node *T2 = y->left;
// 执行旋转
y->left = x;
x->right = T2;
// 更新高度
x->height = max(height(x->left), height(x->right)) + 1;
y->height = max(height(y->left), height(y->right)) + 1;
// 返回新的根节点
return y;
}
汇总:

填坑:



练习:
1、

2、


3、


查找效率分析

总结:

















![[Golang] Sync](https://img-blog.csdnimg.cn/img_convert/775f60abea9274d00dd4eb91ce6dc73b.png)



