(三.1)二叉查找(排序)树、平衡二叉树、红黑树

二叉搜索树(BST)

1、性质:

    ①非空左子树的所有键值小于其根节点的键值

    ②非空右子树的所有键值大于其根节点的键值

    ③左右子树都是二叉搜索树

二、查找效率

任何一个数据的查找过程都需要从根结点出发,沿某一个路径朝叶子结点前进。因此查找中数据比较次数与树的形态密切相关。 

  • 当树中每个结点左右子树高度大致相同时,树高为logN。则平均查找长度与logN成正比,查找的平均时间复杂度在O(logN)数量级上。 
  • 当先后插入的关键字有序时,BST退化成单支树结构。此时树高n。平均查找长度为(n+1)/2,查找的平均时间复杂度在O(N)数量级上。

三、插入、删除效率

操作简单,时间复杂度为O(logN)

 

平衡二叉树(AVL)

引出平衡二叉树的原因:二叉查找树在最差情况下和顺序查找效率相当,而且树的结构与查找关键字效率影响比较大,即树的形状不平衡。(二叉查找树查找效率并不是严格O(logN))

一、性质

  1. 可以是空树。
  2. 高度之差的绝对值不超过 1
  3. 子树也是平衡二叉树

二、增、删、查效率

平均和最坏情况均为O(logn)

红黑树

引出红黑树的原因:二叉平衡树的严格平衡策略,换来的是稳定的O(logn)查找时间复杂度,代价有点大,红黑树是一种折中方案。

1.性质

  • 每个结点要么是红的要么是黑的
  • 根结点是黑的。  
  • 每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的
  • 如果一个结点是红的,那么它的两个儿子都是黑的
  •  对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点

二、增、删、查效率

查找 效率最好情况下时间复杂度为O(logN),但在最坏情况下比AVL要差一些,但也远远好于BST。 
插入和删除操作改变树的平衡性的概率要远远小于AVL(RBT不是高度平衡的)。因此需要的旋转操作的可能性要小,而且一旦需要旋转,插入一个结点最多只需要旋转2次,删除最多只需要旋转3次(小于AVL的删除操作所需要的旋转次数)。虽然变色操作的时间复杂度在O(logN),但是实际上,这种操作由于简单所需要的代价很小。
 

posted @ 2019-07-13 15:26  测试开发分享站  阅读(185)  评论(0编辑  收藏  举报