Files
2022-WangDao-CS-DS-Notes/5.6平衡二叉树.md
2022-03-28 16:49:12 +08:00

47 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 平衡二叉树——Balanced Binary Tree
### 一、平衡二叉树的定义
`平衡二叉树`,又被称为`AVL树`有别于AVL算法且具有以下性质
它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1并且左右两个子树都是一棵平衡二叉树。
AVL是两个人的名字ASL是平均查找长度不一样
`结点的平衡因子=左子树高-右子树高`
平衡二叉树结点的平衡因子的值只可能是-1、0、1。
![img](https://images2015.cnblogs.com/blog/805461/201601/805461-20160127214903223-1113949071.jpg)
### 二、平衡二叉树的存储结构(用链式存储)
平衡二叉树的类型表述(与二叉树不一样)
```c
typedef struct AVLNode{
int key; //数据域
int balance; //平衡因子
struct AVLNode *lchide, *rchild; //左、右孩子指针
}AVLNode, *AVLTree;
```
### 三、平衡二叉树的插入
在平衡的二叉排序树中插入一个结点导致不平衡,如何调整平衡?
解决方法:调整`“最小不平衡树”`
四种调整方法:
①LL在A的`左孩子的左子树`中插入导致A的不平衡将A的`左孩子右上旋`
②RR在A的`右孩子的右子树`中插入导致A的不平衡将A的`右孩子左上旋`
③LR在A的`左孩子的右子树`中插入导致A的不平衡将A的`左孩子的右孩子,先左上旋再右上旋`
④RL在A的`右孩子的左子树`中插入导致A的不平衡将A的`右孩子的左孩子,先右上旋再左上旋`
### 四、查找效率分析
`平均查找的时间复杂度`=O(log~2~h)
### 五、高度为h的平衡二叉树的最少结点数
`递推公式`$$n_h=n_{h-1}+n_{h-2}+1$$