数据结构与算法(26)——平衡二叉查找树:AVL

  • 平衡二叉查找树

AVL树的实现中,需要对每个节点跟踪 “平衡因子balance factor”参数

平衡因子是根据节点的左右子树的高度来 定义的,确切地说,是左右子树高度差: 

如果一个二叉查找树中每个节点的平衡因 子都在-1,0,1之间,则把这个二叉搜索 树称为平衡树

 

  •  AVL树性能分析

我们来分析AVL树最差情形下的性能:即 平衡因子为1或者-1 下图列出平衡因子为1的“左重”AVL树,树的高 度从1开始,来看看问题规模(总节点数N)和比 对次数(树的高度h)之间的关系如何?

 观察上图h=1~4时,总节点数N的变化

h= 1, N= 1
h= 2, N= 2= 1+ 1

h= 3, N= 4= 1+ 1+ 2

h= 4, N= 7= 1+ 2+ 4

反正最后就是推出了AVL树的搜索时间复杂度为O(log n)

  •  AVL树的python实现

这里首先有个重要的性质需要记住:向AVL加入一个新key,则有这样的情况存在:

叶子节点:叶节点的平衡因子是0,其本身无需重新 平衡 

父节点:作为左子节点插入,则父节点平衡因子会增加1; 作为右子节点插入,则父节点平衡因子会减少1。

这种影响可能随着其父节点到根节点的路 径一直传递上去,直到传递到根节点为止; 或者某个父节点平衡因子被调整到0,不再影响上层节点的平衡因子为止。

然后代码比较复杂,这里也不赘述了。。。。

这两节博客都比较水。

参考链接:https://www.bilibili.com/video/BV1VC4y1x7uv?p=72

猜你喜欢

转载自www.cnblogs.com/yeshengCqupt/p/13399753.html