You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
obsidian-sync/日常学习/数据结构/AVL平衡搜索树(自平衡二叉搜索树).md

18 lines
1.4 KiB

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)