不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

算法训练营-AVL树和红黑树的实现和特性

AVL树

  • 发明者:Adelson-Velsky and Landis Tree
  • Blance Factor(平衡因子):是它的左子树的高度减去它的右子树的高度(有时相反)。balance factor= {-1,0,1}
  • 通过旋转操作来进行平衡(四种)
  • Self-balancing binary search tree
  • 不足:结点需要存储额外信息、且调整次数频繁

记录左右子树高度

例如F点,右子树高度1 - 左子树高度2 = -1

旋转操作

1,左旋

2,右旋

3,左右旋

4,右左旋

红黑树(Red-black Tree)

红黑树是一种近似平衡的二叉搜索树(Binary Search Tree),它能够确保任何一个结点的左右子树的高度差小于两倍。具体来说,红黑树是满足如下条件的二叉搜索树:

  • 每个结点要么是红色,要么是黑色;
  • 根结点是黑色;
  • 每个叶结点(NIL结点、空结点)是黑色的;
  • 不能有相邻的两个红色结点;
  • 从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点。
  • 关键性质:从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。

对比

翻译:

  • AVL树提供了更快的查询,因为它是严格平衡的;
  • 红黑树提供了更快的插入和删除的操作,因为AVL的旋转操作会更多而红黑树会更少一点;
  • AVL存在factorsheights更多一点,它需要更多的内存附加在每个结点里面来存这些了额外的信息,而红黑树要的信息非常少,它只要一个bit就是来存0和1表示黑或者是红;
  • 红黑树是用在你们常常写的一些高级语言的库里面,比如C++中的map、set;如果用在数据库里面的话一般用AVL

参考链接

wiki-AVL树
leetcode刷题(十):树(红黑树,B树)

------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!