AVL树可以定义为高度平衡二叉搜索树,其中每个节点与平衡因子相关联,该平衡因子通过从其左子树的子树中减去其右子树的高度来计算。 如果每个节点的平衡因子在`-1`到`1`之间,则称树是平衡的,否则,树将是不平衡的并且需要平衡。 平衡系数(k)=高度(左(k)) - 高度(右(k)) 如果任何节点的平衡因子为`1`,则意味着左子树比右子树高一级。 如果任何节点的平衡因子为`0`,则意味着左子树和右子树包含相等的高度。 如果任何节点的平衡因子是`-1`,则意味着左子树比右子树低一级。 可以看到,与每个节点相关的平衡因子介于`-1`和`+1`之间。 因此,它是AVL树的一个例子。 ![[160613_98775.png]] ### 为什么使用AVL树: 通过自平衡解决二叉搜索树查找(搜索)节点问题!!! AVL树通过不让它倾斜来控制二叉搜索树的高度。 高度为`h`的二叉搜索树中的所有操作所花费的时间 是`O(h)`。 但是,如果二叉搜索树变得偏斜(即最坏的情况),它可以扩展到`O(n)`。 通过将该高度限制为`log n`,AVL树将每个操作的上限强加为`O(log n)`,其中`n`是节点的数量。 模拟AVL树插入及自平衡过程 [AVL Tree Visualzation (usfca.edu)](https://www.cs.usfca.edu/~galles/visualization/AVLtree.html) [关于AVL树和红黑树的一点看法 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/93369069)